3
3
import sys
4
4
from typing import Literal , Type
5
5
6
-
7
- from .config import Config
8
6
from .mininterface import Mininterface
7
+ from .config import Config , InterfaceName
9
8
from .exceptions import InterfaceNotAvailable
10
- from .text_interface import TextInterface
11
9
12
- # We do not use InterfaceType as a type in run because we want the documentation to show full alias.
13
- InterfaceType = Type [Mininterface ] | Literal ["gui" ] | Literal ["tui" ] | None
10
+ InterfaceType = Type [Mininterface ] | InterfaceName | None
14
11
15
12
16
13
def __getattr__ (name ):
17
- # shortcuts
18
- if name == "GuiInterface" :
19
- return __getattr__ ("TkInterface" )
20
- if name == "TuiInterface" :
21
- # if textual not installed or isatty False, return TextInterface
22
- return __getattr__ ("TextualInterface" ) or TextInterface
23
-
24
- # real interfaces
25
- if name == "TkInterface" :
26
- try :
27
- globals ()[name ] = import_module ("..tk_interface" , __name__ ).TkInterface
28
- return globals ()[name ]
29
- except InterfaceNotAvailable :
30
- return None
31
-
32
- if name == "TextualInterface" :
33
- try :
34
- globals ()[name ] = import_module ("..textual_interface" , __name__ ).TextualInterface
35
- return globals ()[name ]
36
- except InterfaceNotAvailable :
37
- return None
38
- return None # such attribute does not exist
14
+ match name :
15
+ # shortcuts
16
+ case "GuiInterface" :
17
+ return __getattr__ ("TkInterface" )
18
+ case "TuiInterface" :
19
+ # if textual not installed or isatty False, return TextInterface
20
+ return __getattr__ ("TextualInterface" ) or __getattr__ ("TextInterface" )
21
+
22
+ # real interfaces
23
+ case "TextInterface" :
24
+ try :
25
+ globals ()[name ] = import_module ("..text_interface" , __name__ ).TextInterface
26
+ return globals ()[name ]
27
+ except InterfaceNotAvailable :
28
+ return None
29
+ case "TkInterface" :
30
+ try :
31
+ globals ()[name ] = import_module ("..tk_interface" , __name__ ).TkInterface
32
+ return globals ()[name ]
33
+ except InterfaceNotAvailable :
34
+ return None
35
+
36
+ case "TextualInterface" :
37
+ try :
38
+ globals ()[name ] = import_module ("..textual_interface" , __name__ ).TextualInterface
39
+ return globals ()[name ]
40
+ except InterfaceNotAvailable :
41
+ return None
42
+ case _:
43
+ return None # such attribute does not exist
39
44
40
45
41
46
def get_interface (title = "" , interface : InterfaceType = None , env = None ):
@@ -44,11 +49,17 @@ def get_interface(title="", interface: InterfaceType = None, env=None):
44
49
if isinstance (interface , type ) and issubclass (interface , Mininterface ):
45
50
# the user gave a specific interface, let them catch InterfaceNotAvailable then
46
51
return interface (* args )
47
- if interface == "gui" or interface is None :
48
- try :
49
- return __getattr__ ("GuiInterface" )(* args )
50
- except InterfaceNotAvailable :
51
- pass
52
+ match interface :
53
+ case "gui" | None :
54
+ try :
55
+ return __getattr__ ("GuiInterface" )(* args )
56
+ except InterfaceNotAvailable :
57
+ pass
58
+ case "text" :
59
+ try :
60
+ return __getattr__ ("TextInterface" )(* args )
61
+ except InterfaceNotAvailable :
62
+ pass
52
63
try :
53
64
return __getattr__ ("TuiInterface" )(* args )
54
65
except InterfaceNotAvailable :
0 commit comments