Raise helpful error when using the wrong plugin base classes #8893
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
Client.register_plugin()
method uses@functools.singledispatchmethod
to dispatch to the correct plugin registration method. Howeversingledispatchmethod
doesn't like thedask.distributed
import shim and can't determine thatdask.distributed.diagnostics.plugins.WorkerPlugin
is the same asdistributed.diagnostics.plugins.WorkerPlugin
.This means that plugins based on classes like
dask.distributed.diagnostics.plugins.WorkerPlugin
raise theTypeError("Registering duck-typed plugins is not allowed. Please inherit from NannyPlugin, WorkerPlugin, or SchedulerPlugin to create a plugin.")
exception.I explored importing the base classes from the
dask.distributed
path and registering those for dispatch too, but it's not possible to import them fromdask.distributed.diagnostics.plugins
whiledistributed
is being imported. And it's not possible to register them at runtime, only at import time.Therefore the best option here appears to be to improve the error message. So this PR checks for plugins based on classes from
dask.distributed.diagnostics.plugins
and makes the error message more helpful.Closes #8778
pre-commit run --all-files