-
Notifications
You must be signed in to change notification settings - Fork 55
Expand file tree
/
Copy pathcommands_parser.py
More file actions
108 lines (96 loc) · 3.45 KB
/
Copy pathcommands_parser.py
File metadata and controls
108 lines (96 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
import platform
from prompt_toolkit.input import DummyInput
from prompt_toolkit.output import DummyOutput
from fabric_cli.core.fab_interactive import InteractiveCLI
from fabric_cli.core.fab_parser_setup import CustomArgumentParser
from fabric_cli.parsers.fab_acls_parser import register_parser as register_acls_parser
from fabric_cli.parsers.fab_api_parser import register_parser as register_api_parser
from fabric_cli.parsers.fab_config_parser import (
register_parser as register_config_parser,
)
from fabric_cli.parsers.fab_find_parser import (
register_parser as register_find_parser,
)
from fabric_cli.parsers.fab_fs_parser import (
register_assign_parser,
register_cd_parser,
register_cp_parser,
register_deploy_parser,
register_exists_parser,
register_export_parser,
register_get_parser,
register_import_parser,
register_ln_parser,
register_ls_parser,
register_mkdir_parser,
register_mv_parser,
register_open_parser,
register_rm_parser,
register_set_parser,
register_start_parser,
register_stop_parser,
register_unassign_parser,
)
from fabric_cli.parsers.fab_jobs_parser import register_parser as register_jobs_parser
from fabric_cli.parsers.fab_labels_parser import (
register_parser as register_labels_parser,
)
from fabric_cli.parsers.fab_tables_parser import (
register_parser as register_tables_parser,
)
parserHandlers = [
register_labels_parser,
register_config_parser,
register_cd_parser,
register_cp_parser,
register_deploy_parser,
register_exists_parser,
register_acls_parser,
register_export_parser,
register_import_parser,
register_assign_parser,
register_find_parser,
register_ln_parser,
register_ls_parser,
register_mv_parser,
register_unassign_parser,
register_api_parser,
register_get_parser,
register_stop_parser,
register_start_parser,
register_set_parser,
register_open_parser,
register_rm_parser,
register_mkdir_parser,
register_jobs_parser,
register_tables_parser,
]
class CLIExecutor:
def __init__(self):
customArgumentParser = CustomArgumentParser()
self._parser = customArgumentParser.add_subparsers()
for register_parser_handler in parserHandlers:
register_parser_handler(self._parser)
# On Windows without a console, PromptSession() raises
# NoConsoleScreenBufferError. Patch PromptSession in the interactive
# module to inject DummyInput/DummyOutput before the singleton is created.
if platform.system() == "Windows":
import fabric_cli.core.fab_interactive as _interactive_mod
_orig_ps = _interactive_mod.PromptSession
def _safe_prompt_session(*args, **kwargs):
kwargs.setdefault("input", DummyInput())
kwargs.setdefault("output", DummyOutput())
return _orig_ps(*args, **kwargs)
_interactive_mod.PromptSession = _safe_prompt_session
try:
self._interactiveCLI = InteractiveCLI(
customArgumentParser, self._parser
)
finally:
_interactive_mod.PromptSession = _orig_ps
else:
self._interactiveCLI = InteractiveCLI(customArgumentParser, self._parser)
def exec_command(self, command: str) -> None:
self._interactiveCLI.handle_command(command)