-
-
Notifications
You must be signed in to change notification settings - Fork 102
Description
Elevator Pitch
Break up handlers.add_handlers into something more easily overrideable.
Motivation
Presently, add_handlers is a single monolithic function that does... something to the app that goes in. Some features can be disabled by (un-)configuring the URL, but this wouldn't prevent things from getting added to a future release of the application, e.g. EmailHandler, etc. that a downstream may not want.
The sterling work over on voila-dashboards/voila#846 raises the point of only getting the handlers you want, irrespective of the jupyterlab_server version you'd pull in. In the case of voila, things like workspaces and extension manager points may not be useful, while certain parts of translations, themes, licenses (#161) would be important, but not the writeable ones.
Design ideas
Build up something like LabCapabilities which handles actually installing different handlers. It probably would still expose add_handlers, but would be more configurable (but perhaps not traitlets.config-urable).
class LabCapabilities(HasTraits):
allowed_capabilities = ...
blocked_capabilities = ...
def add_handlers(self, handlers, extension_app): ...At an even lower level, these might allow for blocking individual methods, e.g. disabling POST, etc.
{WorkspacesHandler: ["post"]}
Alternatives
Perhaps this could land in jupyter_server, e.g. as an OpenAPI contract which the ultimate application implementation could levy against all the stuff that might get installed via e.g. extension.