Replace Function Of Other Plugin#
This example plugin modifies the functionality of another plugin, by replacing a function with a new function (monkeypatching).
More information about this workflow can be found here.
See the section for Single File Plugins on how to load this example.
# PatchDeadline.py
name = "PatchDeadline"
classname = "PatchDeadline"
class PatchDeadline:
def __init__(self, core):
self.core = core
self.version = "v1.0.0"
# check if Deadline plugin is loaded
dlPlugin = self.core.getPlugin("Deadline")
if dlPlugin:
# if yes, patch the function
self.applyPatch(dlPlugin)
# register callback in case the Deadline plugin will be loaded later on
# this is important if the plugin gets loaded later on during the startup or manually by the user
self.core.registerCallback(
"pluginLoaded", self.onPluginLoaded, plugin=self
)
def onPluginLoaded(self, plugin):
# check if the loaded plugin is the Deadline plugin and if yes apply the patch
if plugin.pluginName == "Deadline":
self.applyPatch(plugin)
def applyPatch(self, plugin):
# apply the monkeypatch to the "getDeadlineGroups" function of the Deadline plugin
self.core.plugins.monkeyPatch(plugin.getDeadlineGroups, self.getDeadlineGroups, self, force=True)
def getDeadlineGroups(self):
# the original function reads the groups from the project config
# with this patch the groups are queried directly from Deadline
groups = self.core.getPlugin("Deadline").refreshGroups()
groups = groups or []
return groups