# New plugin system for Pinry New plugin system is under development and a naive version has been released. A `PinryPlugin` is a python class or object which is callable. The plugin loader will call the `Plugin` target only once and use the plugin instance after specified events triggered just like the way django-middleware works. You could create a plugin as python-package with content below: ``` from core.models import Image from django_images.models import Thumbnail class Plugin: def __init__(self): # do something you want, just be called only once pass def process_image_pre_creation(self, django_settings, image_instance: Image): pass def process_thumbnail_pre_creation(self, django_settings, thumbnail_instance: Thumbnail): pass ``` You could make some changes on Image object and Thumbnail object before they actually be saved (for example, add water-mark to them). You could access example plugin via `pinry_plugins/batteries/plugin_example.py`. After all, enable the plugin in local_settings.py: ``` ENABLED_PLUGINS = [ 'pinry_plugins.batteries.plugin_example.Plugin', ] ``` Now the plugin will work like a charm! # List of Available Plugins left blank to fill, coming soon... # Install Plugin in Docker If you have a plugin named `hello.py` and it have a `Plugin` class inside. You could just copy it to directory `pinry_plugins/batteries`. Now add config to local_settings.py ``` ENABLED_PLUGINS = [ 'pinry_plugins.batteries.hello.Plugin', ] ``` Then, rebuild your docker image, the plugin will work if no further python dependencies required.