Skip to content

Commit 5122172

Browse files
authored
Allow specifying extra_labextensions_path (#1542)
* Allow specifying extra_labextensions_path * Add docs * format
1 parent 147ecd9 commit 5122172

File tree

5 files changed

+50
-5
lines changed

5 files changed

+50
-5
lines changed

docs/customize.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,3 +768,30 @@ Voila will load all extensions under `{PREFIX}/share/jupyter/labextensions` just
768768

769769
It also has its own path for labextensions that you can use: `{PREFIX}/share/jupyter/voila/labextensions`. Installing extensions there will make those extensions only available to Voila. This is really useful if you
770770
don't want to pollute JupyterLab or Jupyter Notebook with extensions that only work for Voila.
771+
772+
### Configuring extra labextensions paths
773+
774+
You can configure additional paths for Voilà to search for JupyterLab extensions using the `extra_labextensions_path` configuration option:
775+
776+
```bash
777+
voila --VoilaConfiguration.extra_labextensions_path="['/path/to/custom/extensions', '/another/path']"
778+
```
779+
780+
Or via the configuration file (`voila.json`):
781+
782+
```json
783+
{
784+
"VoilaConfiguration": {
785+
"extra_labextensions_path": ["/path/to/custom/extensions", "/another/path"]
786+
}
787+
}
788+
```
789+
790+
Or in a Python configuration file (`voila.py`):
791+
792+
```python
793+
c.VoilaConfiguration.extra_labextensions_path = [
794+
'/path/to/custom/extensions',
795+
'/another/path'
796+
]
797+
```

voila/app.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,9 @@ def _default_log_level(self):
474474

475475
@property
476476
def labextensions_path(self):
477-
return get_voila_labextensions_path()
477+
return get_voila_labextensions_path(
478+
self.voila_configuration.extra_labextensions_path
479+
)
478480

479481
@property
480482
def data_dir(self):
@@ -761,7 +763,9 @@ def init_handlers(self) -> List:
761763
{
762764
"themes_url": "/voila/api/themes",
763765
"path": self.themes_dir,
764-
"labextensions_path": get_voila_labextensions_path(),
766+
"labextensions_path": get_voila_labextensions_path(
767+
self.voila_configuration.extra_labextensions_path
768+
),
765769
"no_cache_paths": ["/"],
766770
},
767771
),

voila/configuration.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,3 +269,9 @@ def page_config_hook(
269269
This option is not compatible with preheat-kernel option.
270270
""",
271271
)
272+
273+
extra_labextensions_path = List(
274+
Unicode(),
275+
config=True,
276+
help="""Extra paths to look for federated JupyterLab extensions""",
277+
)

voila/server_extension.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,9 @@ def _load_jupyter_server_extension(server_app: ServerApp):
125125
tree_handler_conf = {"voila_configuration": voila_configuration}
126126

127127
themes_dir = pjoin(get_data_dir(), "themes")
128-
labextensions_path = get_voila_labextensions_path()
128+
labextensions_path = get_voila_labextensions_path(
129+
voila_configuration.extra_labextensions_path
130+
)
129131

130132
handlers = [
131133
(

voila/utils.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ async def _get_request_info(ws_url: str) -> Awaitable:
9292
return ri
9393

9494

95-
def get_voila_labextensions_path():
95+
def get_voila_labextensions_path(extra_paths=None):
9696
labextensions_path = jupyter_path("labextensions")
9797

9898
# Paths to labextensions specific to Voila
@@ -101,6 +101,10 @@ def get_voila_labextensions_path():
101101
]
102102
labextensions_path = labextensions_path + voila_labextensions
103103

104+
# Add extra labextensions paths if provided
105+
if extra_paths:
106+
labextensions_path = labextensions_path + extra_paths
107+
104108
return labextensions_path
105109

106110

@@ -136,7 +140,9 @@ def get_page_config(
136140
)
137141
page_config.setdefault("mathjaxConfig", mathjax_config)
138142
page_config.setdefault("fullMathjaxUrl", mathjax_url)
139-
labextensions_path = get_voila_labextensions_path()
143+
labextensions_path = get_voila_labextensions_path(
144+
voila_configuration.extra_labextensions_path
145+
)
140146

141147
recursive_update(
142148
page_config,

0 commit comments

Comments
 (0)