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

1from importlib import import_module 

2from types import ModuleType 

3from typing import Dict, List, Optional 

4 

5from .. import _jupyter_nbextension_paths 

6 

7 

8def is_installed(package: str) -> bool: 

9 try: 

10 import_module(package) 

11 return True 

12 except ModuleNotFoundError: 

13 return False 

14 

15 

16def get_notebook_major_version() -> int: 

17 from notebook import __version__ 

18 

19 return int(__version__.split(".")[0]) 

20 

21 

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 

28 

29 

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 

36 

37 

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 

49 

50 

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) 

59 

60 return toggle_server_extension_python