Plugins

This is the official documentation of the forestadmin-agent-django and forestadmin-agent-flask Python agents.

When customizing your Agent behavior, it is quite common to have to perform the same tasks on multiple Fields and Collections.

Plugins are the answer to that need, and you are strongly encouraged to use them everywhere you notice that your customization files could benefit from code factorization.

Minimal example

Using plugins

Plugins are used by either importing a module, or installing the relevant package, and then calling the use method.

Depending on the plugin, options may be provided.

# The .use() method can be called both on the agent and on collections.
agent.use(
    # Some plugins do not require options
    RemoveTimestamps
    # Others do
).customize_collection('accounts').use(CreateFileField, { "fieldname": 'avatar' })

Writing plugins

A Plugin is nothing more than a class that implements our Plugin interface with an async method and can perform customizations.

The full documentation can be found in the "Write your own plugin" section.

from forestadmin.datasource_toolkit.plugins.plugin import Plugin
# from forestadmin.datasource_toolkit.datasource_customizer.collection_customizer import (
#     CollectionCustomizer
# )
# from forestadmin.datasource_toolkit.datasource_customizer.datasource_customizer import (
#     DatasourceCustomizer
# )

class RemoveTimestamps(Plugin):
    async def run(
        self,
        datasource_customizer: "DatasourceCustomizer",  # noqa: F821
        collection_customizer: Optional["CollectionCustomizer"] = None,  # noqa: F821
        options: Optional[Dict] = {},
    ):
        # Allow the plugin to be used both on the dataSource or on individual collections
        collections = (
            [collection_customizer]
            if collection_customizer
            else datasource_customizer.collections
        )

        for current_collection in collections:
            collection.remove_field("createdAt")
            collection.remove_field("updatedAt")

Last updated