Hooks

From version 0.12 Papis has a minimal hook infrastructure. Some parts of Papis define and run hooks so that users and plugin writers can also tap into this functionality.

A hook is declared in the same way as a plugin, in fact they are implemented in the same way within the stevedore plugin.

Writing hooks as a user

Right now the only way to add a hook as a user is using your config.py configuration file, which gets loaded when your Papis configuration gets loaded.

As an example you can add a function to the on_edit_done hook like

import papis.hooks

papis.hooks.add("on_edit_done", lambda: print(42))

Writing hooks as a developer

To add a hook as a plugin writer or a developer you can just add the entrypoint to the pyproject.toml file. For instance for the on_edit_done hook you would write

[project.entry-points."papis.hook.on_edit_done"]
my_hook_name = "path.module:function"

Available hooks

on_edit_done

This hook is called by papis edit after editing has finished, but before it is saved to the database. The callbacks for this hook have the following format:

def callback(doc: papis.document.Document) -> None:
    ...

on_add_done

This hook is called by papis add after all editing has finished, but before the document is searched for duplicates and added to the database. The callbacks for this hook have the following format:

def callback(tmp_doc: papis.document.Document) -> None:
    ...

Note that the tmp_doc argument is not the final document. It will be moved to a final location inside the chosen library after the hook was called.