FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
aws-cli/awscli/completer.py at develop · gitqueue/aws-cli · GitHub
gitqueue
/
aws-cli
Public
forked from
aws/aws-cli
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
aws-cli
/
awscli
/
completer.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
executable file
·
146 lines (124 loc) · 5.74 KB
Breadcrumbs
aws-cli
/
awscli
/
completer.py
Copy path
File metadata and controls
executable file
·
146 lines (124 loc) · 5.74 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
# http://aws.amazon.com/apache2.0/
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
import
awscli
.
clidriver
import
sys
import
logging
import
copy
LOG
=
logging
.
getLogger
(
__name__
)
class
Completer
(
object
):
def
__init__
(
self
,
driver
=
None
):
if
driver
is
not
None
:
self
.
driver
=
driver
else
:
self
.
driver
=
awscli
.
clidriver
.
create_clidriver
()
self
.
main_help
=
self
.
driver
.
create_help_command
()
self
.
main_options
=
self
.
_get_documented_completions
(
self
.
main_help
.
arg_table
)
def
complete
(
self
,
cmdline
,
point
=
None
):
if
point
is
None
:
point
=
len
(
cmdline
)
args
=
cmdline
[
0
:
point
].
split
()
current_arg
=
args
[
-
1
]
cmd_args
=
[
w
for
w
in
args
if
not
w
.
startswith
(
'-'
)]
opts
=
[
w
for
w
in
args
if
w
.
startswith
(
'-'
)]
cmd_name
,
cmd
=
self
.
_get_command
(
self
.
main_help
,
cmd_args
)
subcmd_name
,
subcmd
=
self
.
_get_command
(
cmd
,
cmd_args
)
if
cmd_name
is
None
:
# If we didn't find any command names in the cmdline
# lets try to complete provider options
return
self
.
_complete_provider
(
current_arg
,
opts
)
elif
subcmd_name
is
None
:
return
self
.
_complete_command
(
cmd_name
,
cmd
,
current_arg
,
opts
)
return
self
.
_complete_subcommand
(
subcmd_name
,
subcmd
,
current_arg
,
opts
)
def
_complete_command
(
self
,
command_name
,
command_help
,
current_arg
,
opts
):
if
current_arg
==
command_name
:
if
command_help
:
return
self
.
_get_documented_completions
(
command_help
.
command_table
)
elif
current_arg
.
startswith
(
'-'
):
return
self
.
_find_possible_options
(
current_arg
,
opts
)
elif
command_help
is
not
None
:
# See if they have entered a partial command name
return
self
.
_get_documented_completions
(
command_help
.
command_table
,
current_arg
)
return
[]
def
_complete_subcommand
(
self
,
subcmd_name
,
subcmd_help
,
current_arg
,
opts
):
if
current_arg
!=
subcmd_name
and
current_arg
.
startswith
(
'-'
):
return
self
.
_find_possible_options
(
current_arg
,
opts
,
subcmd_help
)
return
[]
def
_complete_option
(
self
,
option_name
):
if
option_name
==
'--endpoint-url'
:
return
[]
if
option_name
==
'--output'
:
cli_data
=
self
.
driver
.
session
.
get_data
(
'cli'
)
return
cli_data
[
'options'
][
'output'
][
'choices'
]
if
option_name
==
'--profile'
:
return
self
.
driver
.
session
.
available_profiles
return
[]
def
_complete_provider
(
self
,
current_arg
,
opts
):
if
current_arg
.
startswith
(
'-'
):
return
self
.
_find_possible_options
(
current_arg
,
opts
)
elif
current_arg
==
'aws'
:
return
self
.
_get_documented_completions
(
self
.
main_help
.
command_table
)
else
:
# Otherwise, see if they have entered a partial command name
return
self
.
_get_documented_completions
(
self
.
main_help
.
command_table
,
current_arg
)
def
_get_command
(
self
,
command_help
,
command_args
):
if
command_help
is
not
None
and
command_help
.
command_table
is
not
None
:
for
command_name
in
command_args
:
if
command_name
in
command_help
.
command_table
:
cmd_obj
=
command_help
.
command_table
[
command_name
]
return
command_name
,
cmd_obj
.
create_help_command
()
return
None
,
None
def
_get_documented_completions
(
self
,
table
,
startswith
=
None
):
names
=
[]
for
key
,
command
in
table
.
items
():
if
getattr
(
command
,
'_UNDOCUMENTED'
,
False
):
# Don't tab complete undocumented commands/params
continue
if
startswith
is
not
None
and
not
key
.
startswith
(
startswith
):
continue
if
getattr
(
command
,
'positional_arg'
,
False
):
continue
names
.
append
(
key
)
return
names
def
_find_possible_options
(
self
,
current_arg
,
opts
,
subcmd_help
=
None
):
all_options
=
copy
.
copy
(
self
.
main_options
)
if
subcmd_help
is
not
None
:
all_options
+=
self
.
_get_documented_completions
(
subcmd_help
.
arg_table
)
for
option
in
opts
:
# Look through list of options on cmdline. If there are
# options that have already been specified and they are
# not the current word, remove them from list of possibles.
if
option
!=
current_arg
:
stripped_opt
=
option
.
lstrip
(
'-'
)
if
stripped_opt
in
all_options
:
all_options
.
remove
(
stripped_opt
)
cw
=
current_arg
.
lstrip
(
'-'
)
possibilities
=
[
'--'
+
n
for
n
in
all_options
if
n
.
startswith
(
cw
)]
if
len
(
possibilities
)
==
1
and
possibilities
[
0
]
==
current_arg
:
return
self
.
_complete_option
(
possibilities
[
0
])
return
possibilities
def
complete
(
cmdline
,
point
):
choices
=
Completer
().
complete
(
cmdline
,
point
)
print
(
'
\n
'
.
join
(
choices
))
if
__name__
==
'__main__'
:
if
len
(
sys
.
argv
)
==
3
:
cmdline
=
sys
.
argv
[
1
]
point
=
int
(
sys
.
argv
[
2
])
elif
len
(
sys
.
argv
)
==
2
:
cmdline
=
sys
.
argv
[
1
]
else
:
print
(
'usage: %s <cmdline> <point>'
%
sys
.
argv
[
0
])
sys
.
exit
(
1
)
print
(
complete
(
cmdline
,
point
))
Back
|
FazBrowse Home
|
New Git URL