Coverage for e2xgrader/extensions/utils.py: 100%
40 statements
« prev ^ index » next coverage.py v7.4.2, created at 2024-03-14 13:22 +0100
« prev ^ index » next coverage.py v7.4.2, created at 2024-03-14 13:22 +0100
1from importlib import import_module
2from types import ModuleType
3from typing import Dict, List, Optional
5from .. import _jupyter_nbextension_paths
8def is_installed(package: str) -> bool:
9 try:
10 import_module(package)
11 return True
12 except ModuleNotFoundError:
13 return False
16def get_notebook_major_version() -> int:
17 from notebook import __version__
19 return int(__version__.split(".")[0])
22def get_nbextension_utils() -> Optional[ModuleType]:
23 if is_installed("notebook") and get_notebook_major_version() < 7:
24 return import_module("notebook.nbextensions")
25 if is_installed("nbclassic"):
26 return import_module("nbclassic.nbextensions")
27 return None
30def get_notebook_config_manager() -> Optional[ModuleType]:
31 if is_installed("jupyter_server"):
32 return import_module("jupyter_server.config_manager").BaseJSONConfigManager
33 if is_installed("notebook") and get_notebook_major_version() < 7:
34 return import_module("notebook.services.config.manager").BaseJSONConfigManager
35 return None
38def discover_nbextensions(mode: str) -> List[Dict[str, str]]:
39 extensions = list()
40 for nbextension in _jupyter_nbextension_paths():
41 if (
42 f"{mode}_notebook" in nbextension["dest"]
43 or f"{mode}_tree" in nbextension["dest"]
44 ):
45 extensions.append(
46 dict(require=nbextension["require"], section=nbextension["section"])
47 )
48 return extensions
51def get_serverextension_toggle() -> Optional[ModuleType]:
52 def toggle_server_extension_python(**kwargs):
53 if is_installed("notebook") and get_notebook_major_version() < 7:
54 module = import_module("notebook.serverextensions")
55 module.toggle_serverextension_python(**kwargs)
56 if is_installed("jupyter_server"):
57 module = import_module("jupyter_server.extension.serverextension")
58 module.toggle_server_extension_python(**kwargs)
60 return toggle_server_extension_python