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
« prev ^ index » next coverage.py v7.4.2, created at 2024-03-14 13:22 +0100
1from traitlets import Bool
3from ..extensions import E2xExtensionManager
4from ..utils.mode import E2xGraderMode, infer_e2xgrader_mode
5from .baseapp import E2xGrader
8class ToggleModeApp(E2xGrader):
10 sys_prefix = Bool(False, help="Install extensions to sys.prefix", config=True)
12 user = Bool(False, help="Install extensions to the user space", config=True)
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 }
25 def activate_mode(self):
26 """
27 Activates the specified mode by activating the corresponding extensions
28 using the E2xExtensionManager.
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
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")