Coverage for e2xgrader/apps/togglemodeapp.py: 100%

27 statements  

« prev     ^ index     » next       coverage.py v7.4.2, created at 2024-03-14 13:22 +0100

1from traitlets import Bool 

2 

3from ..extensions import E2xExtensionManager 

4from ..utils.mode import E2xGraderMode, infer_e2xgrader_mode 

5from .baseapp import E2xGrader 

6 

7 

8class ToggleModeApp(E2xGrader): 

9 

10 sys_prefix = Bool(False, help="Install extensions to sys.prefix", config=True) 

11 

12 user = Bool(False, help="Install extensions to the user space", config=True) 

13 

14 flags = { 

15 "sys-prefix": ( 

16 {"ToggleModeApp": {"sys_prefix": True}}, 

17 "Install extensions to sys.prefix", 

18 ), 

19 "user": ( 

20 {"ToggleModeApp": {"user": True}}, 

21 "Install extensions to the user space", 

22 ), 

23 } 

24 

25 def activate_mode(self): 

26 """ 

27 Activates the specified mode by activating the corresponding extensions 

28 using the E2xExtensionManager. 

29 

30 If the mode is "None", it deactivates all e2xgrader extensions. 

31 """ 

32 extension_manager = E2xExtensionManager() 

33 if self.mode == E2xGraderMode.INACTIVE.value: 

34 print( 

35 f"Deactivating e2xgrader extensions with sys_prefix={self.sys_prefix} " 

36 f"and user={self.user}" 

37 ) 

38 extension_manager.deactivate(sys_prefix=self.sys_prefix, user=self.user) 

39 else: 

40 print( 

41 f"Activating mode {self.mode} with sys_prefix={self.sys_prefix} " 

42 f"and user={self.user}" 

43 ) 

44 getattr(extension_manager, f"activate_{self.mode}")( 

45 sys_prefix=self.sys_prefix, user=self.user 

46 ) 

47 self.log.info(f"Activated mode {self.mode}. ") 

48 try: 

49 mode = infer_e2xgrader_mode() 

50 if mode != self.mode: 

51 self.log.warning( 

52 f"The activated mode {self.mode} does not match the infered mode {mode}. \n" 

53 f"The mode {mode} may be activated on a higher level." 

54 ) 

55 except ValueError as e: 

56 self.log.error(str(e)) 

57 self.mode = E2xGraderMode.INVALID.value 

58 

59 def start(self) -> None: 

60 super().start() 

61 if self.sys_prefix and self.user: 

62 self.fail("Cannot install in both sys-prefix and user space")