awscli 1.43.14__py3-none-any.whl → 1.44.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- awscli/__init__.py +1 -1
- awscli/alias.py +3 -3
- awscli/argprocess.py +2 -1
- awscli/clidriver.py +55 -9
- awscli/customizations/cliinputjson.py +4 -0
- awscli/customizations/cloudformation/deploy.py +19 -3
- awscli/customizations/commands.py +2 -1
- awscli/customizations/globalargs.py +169 -0
- awscli/customizations/paginate.py +66 -1
- awscli/customizations/s3/subcommands.py +23 -1
- awscli/customizations/scalarparse.py +42 -5
- awscli/data/cli.json +5 -0
- awscli/examples/global_options.rst +4 -0
- awscli/examples/global_synopsis.rst +1 -0
- awscli/paramfile.py +21 -4
- awscli/utils.py +19 -2
- {awscli-1.43.14.dist-info → awscli-1.44.0.dist-info}/METADATA +2 -2
- {awscli-1.43.14.dist-info → awscli-1.44.0.dist-info}/RECORD +26 -26
- {awscli-1.43.14.data → awscli-1.44.0.data}/scripts/aws +0 -0
- {awscli-1.43.14.data → awscli-1.44.0.data}/scripts/aws.cmd +0 -0
- {awscli-1.43.14.data → awscli-1.44.0.data}/scripts/aws_bash_completer +0 -0
- {awscli-1.43.14.data → awscli-1.44.0.data}/scripts/aws_completer +0 -0
- {awscli-1.43.14.data → awscli-1.44.0.data}/scripts/aws_zsh_completer.sh +0 -0
- {awscli-1.43.14.dist-info → awscli-1.44.0.dist-info}/LICENSE.txt +0 -0
- {awscli-1.43.14.dist-info → awscli-1.44.0.dist-info}/WHEEL +0 -0
- {awscli-1.43.14.dist-info → awscli-1.44.0.dist-info}/top_level.txt +0 -0
awscli/__init__.py
CHANGED
awscli/alias.py
CHANGED
|
@@ -183,7 +183,7 @@ class ServiceAliasCommand(BaseAliasCommand):
|
|
|
183
183
|
parsed_alias_args, remaining = self._parser.parse_known_args(
|
|
184
184
|
alias_args
|
|
185
185
|
)
|
|
186
|
-
self._update_parsed_globals(parsed_alias_args, parsed_globals)
|
|
186
|
+
self._update_parsed_globals(parsed_alias_args, parsed_globals, remaining)
|
|
187
187
|
# Take any of the remaining arguments that were not parsed out and
|
|
188
188
|
# prepend them to the remaining args provided to the alias.
|
|
189
189
|
remaining.extend(args)
|
|
@@ -228,7 +228,7 @@ class ServiceAliasCommand(BaseAliasCommand):
|
|
|
228
228
|
)
|
|
229
229
|
return alias_args
|
|
230
230
|
|
|
231
|
-
def _update_parsed_globals(self, parsed_alias_args, parsed_globals):
|
|
231
|
+
def _update_parsed_globals(self, parsed_alias_args, parsed_globals, remaining):
|
|
232
232
|
global_params_to_update = self._get_global_parameters_to_update(
|
|
233
233
|
parsed_alias_args
|
|
234
234
|
)
|
|
@@ -237,7 +237,7 @@ class ServiceAliasCommand(BaseAliasCommand):
|
|
|
237
237
|
# global parameters provided in the alias before updating
|
|
238
238
|
# the original provided global parameter values
|
|
239
239
|
# and passing those onto subsequent commands.
|
|
240
|
-
emit_top_level_args_parsed_event(self._session, parsed_alias_args)
|
|
240
|
+
emit_top_level_args_parsed_event(self._session, parsed_alias_args, remaining)
|
|
241
241
|
for param_name in global_params_to_update:
|
|
242
242
|
updated_param_value = getattr(parsed_alias_args, param_name)
|
|
243
243
|
setattr(parsed_globals, param_name, updated_param_value)
|
awscli/argprocess.py
CHANGED
|
@@ -65,7 +65,7 @@ class TooComplexError(Exception):
|
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
def unpack_argument(
|
|
68
|
-
session, service_name, operation_name, cli_argument, value
|
|
68
|
+
session, service_name, operation_name, cli_argument, value, parsed_globals
|
|
69
69
|
):
|
|
70
70
|
"""
|
|
71
71
|
Unpack an argument's value from the commandline. This is part one of a two
|
|
@@ -83,6 +83,7 @@ def unpack_argument(
|
|
|
83
83
|
value=value,
|
|
84
84
|
service_name=service_name,
|
|
85
85
|
operation_name=operation_name,
|
|
86
|
+
parsed_globals=parsed_globals,
|
|
86
87
|
)
|
|
87
88
|
|
|
88
89
|
if value_override is not None:
|
awscli/clidriver.py
CHANGED
|
@@ -48,7 +48,7 @@ from awscli.help import (
|
|
|
48
48
|
ServiceHelpCommand,
|
|
49
49
|
)
|
|
50
50
|
from awscli.plugin import load_plugins
|
|
51
|
-
from awscli.utils import emit_top_level_args_parsed_event, write_exception, create_nested_client
|
|
51
|
+
from awscli.utils import emit_top_level_args_parsed_event, write_exception, create_nested_client, resolve_v2_debug_mode
|
|
52
52
|
from botocore import __version__ as botocore_version
|
|
53
53
|
from botocore import xform_name
|
|
54
54
|
|
|
@@ -225,7 +225,7 @@ class CLIDriver:
|
|
|
225
225
|
# that exceptions can be raised, which should have the same
|
|
226
226
|
# general exception handling logic as calling into the
|
|
227
227
|
# command table. This is why it's in the try/except clause.
|
|
228
|
-
self._handle_top_level_args(parsed_args)
|
|
228
|
+
self._handle_top_level_args(parsed_args, remaining)
|
|
229
229
|
self._emit_session_event(parsed_args)
|
|
230
230
|
HISTORY_RECORDER.record(
|
|
231
231
|
'CLI_VERSION', self.session.user_agent(), 'CLI'
|
|
@@ -279,8 +279,8 @@ class CLIDriver:
|
|
|
279
279
|
sys.stderr.write(msg)
|
|
280
280
|
sys.stderr.write('\n')
|
|
281
281
|
|
|
282
|
-
def _handle_top_level_args(self, args):
|
|
283
|
-
emit_top_level_args_parsed_event(self.session, args)
|
|
282
|
+
def _handle_top_level_args(self, args, remaining):
|
|
283
|
+
emit_top_level_args_parsed_event(self.session, args, remaining)
|
|
284
284
|
if args.profile:
|
|
285
285
|
self.session.set_config_variable('profile', args.profile)
|
|
286
286
|
if args.region:
|
|
@@ -542,9 +542,15 @@ class ServiceOperation:
|
|
|
542
542
|
event, parsed_args=parsed_args, parsed_globals=parsed_globals
|
|
543
543
|
)
|
|
544
544
|
call_parameters = self._build_call_parameters(
|
|
545
|
-
parsed_args, self.arg_table
|
|
545
|
+
parsed_args, self.arg_table, parsed_globals
|
|
546
546
|
)
|
|
547
547
|
|
|
548
|
+
self._detect_binary_file_migration_change(
|
|
549
|
+
self._session,
|
|
550
|
+
parsed_args,
|
|
551
|
+
parsed_globals,
|
|
552
|
+
self.arg_table
|
|
553
|
+
)
|
|
548
554
|
event = f'calling-command.{self._parent_name}.{self._name}'
|
|
549
555
|
override = self._emit_first_non_none_response(
|
|
550
556
|
event,
|
|
@@ -590,7 +596,7 @@ class ServiceOperation:
|
|
|
590
596
|
# CLIArguments for values.
|
|
591
597
|
parser.add_argument('help', nargs='?')
|
|
592
598
|
|
|
593
|
-
def _build_call_parameters(self, args, arg_table):
|
|
599
|
+
def _build_call_parameters(self, args, arg_table, parsed_globals):
|
|
594
600
|
# We need to convert the args specified on the command
|
|
595
601
|
# line as valid **kwargs we can hand to botocore.
|
|
596
602
|
service_params = {}
|
|
@@ -601,11 +607,11 @@ class ServiceOperation:
|
|
|
601
607
|
py_name = arg_object.py_name
|
|
602
608
|
if py_name in parsed_args:
|
|
603
609
|
value = parsed_args[py_name]
|
|
604
|
-
value = self._unpack_arg(arg_object, value)
|
|
610
|
+
value = self._unpack_arg(arg_object, value, parsed_globals)
|
|
605
611
|
arg_object.add_to_params(service_params, value)
|
|
606
612
|
return service_params
|
|
607
613
|
|
|
608
|
-
def _unpack_arg(self, cli_argument, value):
|
|
614
|
+
def _unpack_arg(self, cli_argument, value, parsed_globals):
|
|
609
615
|
# Unpacks a commandline argument into a Python value by firing the
|
|
610
616
|
# load-cli-arg.service-name.operation-name event.
|
|
611
617
|
session = self._session
|
|
@@ -613,7 +619,7 @@ class ServiceOperation:
|
|
|
613
619
|
operation_name = xform_name(self._name, '-')
|
|
614
620
|
|
|
615
621
|
return unpack_argument(
|
|
616
|
-
session, service_name, operation_name, cli_argument, value
|
|
622
|
+
session, service_name, operation_name, cli_argument, value, parsed_globals
|
|
617
623
|
)
|
|
618
624
|
|
|
619
625
|
def _create_argument_table(self):
|
|
@@ -661,6 +667,46 @@ class ServiceOperation:
|
|
|
661
667
|
parser = ArgTableArgParser(arg_table)
|
|
662
668
|
return parser
|
|
663
669
|
|
|
670
|
+
def _detect_binary_file_migration_change(
|
|
671
|
+
self,
|
|
672
|
+
session,
|
|
673
|
+
parsed_args,
|
|
674
|
+
parsed_globals,
|
|
675
|
+
arg_table
|
|
676
|
+
):
|
|
677
|
+
if (
|
|
678
|
+
session.get_scoped_config()
|
|
679
|
+
.get('cli_binary_format', None) == 'raw-in-base64-out'
|
|
680
|
+
):
|
|
681
|
+
# if cli_binary_format is set to raw-in-base64-out, then v2 behavior will
|
|
682
|
+
# be the same as v1, so there is no breaking change in this case.
|
|
683
|
+
return
|
|
684
|
+
if resolve_v2_debug_mode(parsed_globals):
|
|
685
|
+
parsed_args_to_check = {
|
|
686
|
+
arg: getattr(parsed_args, arg)
|
|
687
|
+
for arg in vars(parsed_args) if getattr(parsed_args, arg)
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
arg_values_to_check = [
|
|
691
|
+
arg.py_name for arg in arg_table.values()
|
|
692
|
+
if arg.py_name in parsed_args_to_check
|
|
693
|
+
and arg.argument_model.type_name == 'blob'
|
|
694
|
+
]
|
|
695
|
+
if arg_values_to_check:
|
|
696
|
+
print(
|
|
697
|
+
'\nAWS CLI v2 UPGRADE WARNING: When specifying a '
|
|
698
|
+
'blob-type parameter, AWS CLI v2 will assume the '
|
|
699
|
+
'parameter value is base64-encoded. This is different '
|
|
700
|
+
'from v1 behavior, where the AWS CLI will automatically '
|
|
701
|
+
'encode the value to base64. To retain v1 behavior in '
|
|
702
|
+
'AWS CLI v2, set the `cli_binary_format` configuration '
|
|
703
|
+
'variable to `raw-in-base64-out`. See '
|
|
704
|
+
'https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
705
|
+
'cliv2-migration-changes.html'
|
|
706
|
+
'#cliv2-migration-binaryparam.\n',
|
|
707
|
+
file=sys.stderr
|
|
708
|
+
)
|
|
709
|
+
|
|
664
710
|
|
|
665
711
|
class CLIOperationCaller:
|
|
666
712
|
"""Call an AWS operation and format the response."""
|
|
@@ -70,6 +70,10 @@ class CliInputJSONArgument(OverrideRequiredArgsArgument):
|
|
|
70
70
|
try:
|
|
71
71
|
# Try to load the JSON string into a python dictionary
|
|
72
72
|
input_data = json.loads(retrieved_json)
|
|
73
|
+
self._session.register(
|
|
74
|
+
f"get-cli-input-json-data",
|
|
75
|
+
lambda **inner_kwargs: input_data
|
|
76
|
+
)
|
|
73
77
|
except ValueError as e:
|
|
74
78
|
raise ParamError(
|
|
75
79
|
self.name, "Invalid JSON: %s\nJSON received: %s"
|
|
@@ -24,7 +24,8 @@ from awscli.customizations.cloudformation.yamlhelper import yaml_parse
|
|
|
24
24
|
|
|
25
25
|
from awscli.customizations.commands import BasicCommand
|
|
26
26
|
from awscli.compat import get_stdout_text_writer
|
|
27
|
-
from awscli.utils import
|
|
27
|
+
from awscli.customizations.utils import uni_print
|
|
28
|
+
from awscli.utils import create_nested_client, write_exception, resolve_v2_debug_mode
|
|
28
29
|
|
|
29
30
|
LOG = logging.getLogger(__name__)
|
|
30
31
|
|
|
@@ -316,18 +317,33 @@ class DeployCommand(BasicCommand):
|
|
|
316
317
|
s3_uploader = None
|
|
317
318
|
|
|
318
319
|
deployer = Deployer(cloudformation_client)
|
|
320
|
+
v2_debug = resolve_v2_debug_mode(parsed_globals)
|
|
319
321
|
return self.deploy(deployer, stack_name, template_str,
|
|
320
322
|
parameters, parsed_args.capabilities,
|
|
321
323
|
parsed_args.execute_changeset, parsed_args.role_arn,
|
|
322
324
|
parsed_args.notification_arns, s3_uploader,
|
|
323
325
|
tags, parsed_args.fail_on_empty_changeset,
|
|
324
|
-
parsed_args.disable_rollback)
|
|
326
|
+
parsed_args.disable_rollback, v2_debug)
|
|
325
327
|
|
|
326
328
|
def deploy(self, deployer, stack_name, template_str,
|
|
327
329
|
parameters, capabilities, execute_changeset, role_arn,
|
|
328
330
|
notification_arns, s3_uploader, tags,
|
|
329
|
-
fail_on_empty_changeset=True, disable_rollback=False
|
|
331
|
+
fail_on_empty_changeset=True, disable_rollback=False,
|
|
332
|
+
v2_debug=False):
|
|
330
333
|
try:
|
|
334
|
+
if v2_debug and fail_on_empty_changeset:
|
|
335
|
+
uni_print(
|
|
336
|
+
'\nAWS CLI v2 UPGRADE WARNING: In AWS CLI v2, deploying '
|
|
337
|
+
'an AWS CloudFormation Template that results in an empty '
|
|
338
|
+
'changeset will NOT result in an error by default. This '
|
|
339
|
+
'is different from v1 behavior, where empty changesets '
|
|
340
|
+
'result in an error by default. To migrate to v2 behavior '
|
|
341
|
+
'and resolve this warning, you can add the '
|
|
342
|
+
'`--no-fail-on-empty-changeset` flag to the command. '
|
|
343
|
+
'See https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
344
|
+
'cliv2-migration-changes.html#cliv2-migration-cfn.\n',
|
|
345
|
+
out_file=sys.stderr
|
|
346
|
+
)
|
|
331
347
|
result = deployer.create_and_wait_for_changeset(
|
|
332
348
|
stack_name=stack_name,
|
|
333
349
|
cfn_template=template_str,
|
|
@@ -12,12 +12,18 @@
|
|
|
12
12
|
# language governing permissions and limitations under the License.
|
|
13
13
|
import sys
|
|
14
14
|
import os
|
|
15
|
+
|
|
16
|
+
from awscli.customizations.argrename import HIDDEN_ALIASES
|
|
17
|
+
from awscli.customizations.utils import uni_print
|
|
15
18
|
from botocore.client import Config
|
|
16
19
|
from botocore import UNSIGNED
|
|
17
20
|
from botocore.endpoint import DEFAULT_TIMEOUT
|
|
21
|
+
from botocore.useragent import register_feature_id
|
|
18
22
|
import jmespath
|
|
19
23
|
|
|
20
24
|
from awscli.compat import urlparse
|
|
25
|
+
from awscli.utils import resolve_v2_debug_mode
|
|
26
|
+
|
|
21
27
|
|
|
22
28
|
def register_parse_global_args(cli):
|
|
23
29
|
cli.register('top-level-args-parsed', resolve_types,
|
|
@@ -30,6 +36,8 @@ def register_parse_global_args(cli):
|
|
|
30
36
|
unique_id='resolve-cli-read-timeout')
|
|
31
37
|
cli.register('top-level-args-parsed', resolve_cli_connect_timeout,
|
|
32
38
|
unique_id='resolve-cli-connect-timeout')
|
|
39
|
+
cli.register('top-level-args-parsed', detect_migration_breakage,
|
|
40
|
+
unique_id='detect-migration-breakage')
|
|
33
41
|
|
|
34
42
|
|
|
35
43
|
def resolve_types(parsed_args, **kwargs):
|
|
@@ -90,6 +98,167 @@ def resolve_cli_connect_timeout(parsed_args, session, **kwargs):
|
|
|
90
98
|
arg_name = 'connect_timeout'
|
|
91
99
|
_resolve_timeout(session, parsed_args, arg_name)
|
|
92
100
|
|
|
101
|
+
def detect_migration_breakage(parsed_args, session, remaining_args, **kwargs):
|
|
102
|
+
if not resolve_v2_debug_mode(parsed_args):
|
|
103
|
+
return
|
|
104
|
+
region = parsed_args.region or session.get_config_variable('region')
|
|
105
|
+
s3_config = session.get_config_variable('s3')
|
|
106
|
+
if (
|
|
107
|
+
not session.get_scoped_config().get('cli_pager', None)
|
|
108
|
+
== '' and 'AWS_PAGER' not in os.environ
|
|
109
|
+
):
|
|
110
|
+
uni_print(
|
|
111
|
+
'\nAWS CLI v2 UPGRADE WARNING: By default, the AWS CLI v2 returns '
|
|
112
|
+
'all output through your operating system’s default pager '
|
|
113
|
+
'program. This is different from v1 behavior, where the system '
|
|
114
|
+
'pager is not used by default. To retain AWS CLI v1 behavior in '
|
|
115
|
+
'AWS CLI v2, set the `cli_pager` configuration setting, or the '
|
|
116
|
+
'`AWS_PAGER` environment variable, to the empty string. See '
|
|
117
|
+
'https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
118
|
+
'cliv2-migration-changes.html#cliv2-migration-output-pager.\n',
|
|
119
|
+
out_file=sys.stderr
|
|
120
|
+
)
|
|
121
|
+
if 'PYTHONUTF8' in os.environ or 'PYTHONIOENCODING' in os.environ:
|
|
122
|
+
if 'AWS_CLI_FILE_ENCODING' not in os.environ:
|
|
123
|
+
uni_print(
|
|
124
|
+
'\nThe AWS CLI v2 does not support The `PYTHONUTF8` and '
|
|
125
|
+
'`PYTHONIOENCODING` environment variables, and instead uses '
|
|
126
|
+
'the `AWS_CLI_FILE_ENCODING` variable. This is different from '
|
|
127
|
+
'v1 behavior, where the former two variables are used '
|
|
128
|
+
'instead. To retain AWS CLI v1 behavior in AWS CLI v2, set '
|
|
129
|
+
'the `AWS_CLI_FILE_ENCODING` environment variable instead. '
|
|
130
|
+
'See https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
131
|
+
'cliv2-migration-changes.html'
|
|
132
|
+
'#cliv2-migration-encodingenvvar.\n',
|
|
133
|
+
out_file=sys.stderr
|
|
134
|
+
)
|
|
135
|
+
if (
|
|
136
|
+
(
|
|
137
|
+
s3_config is None
|
|
138
|
+
or s3_config.get('us_east_1_regional_endpoint', 'legacy')
|
|
139
|
+
== 'legacy'
|
|
140
|
+
)
|
|
141
|
+
and region in ('us-east-1', None)
|
|
142
|
+
):
|
|
143
|
+
session.register(
|
|
144
|
+
'request-created.s3.*',
|
|
145
|
+
warn_if_east_configured_global_endpoint
|
|
146
|
+
)
|
|
147
|
+
session.register(
|
|
148
|
+
'request-created.s3api.*',
|
|
149
|
+
warn_if_east_configured_global_endpoint
|
|
150
|
+
)
|
|
151
|
+
if session.get_config_variable('api_versions'):
|
|
152
|
+
uni_print(
|
|
153
|
+
'\nAWS CLI v2 UPGRADE WARNING: AWS CLI v2 UPGRADE WARNING: '
|
|
154
|
+
'The AWS CLI v2 does not support calling older versions of AWS '
|
|
155
|
+
'service APIs via the `api_versions` configuration file setting. This '
|
|
156
|
+
'is different from v1 behavior, where this configuration setting '
|
|
157
|
+
'can be used to pin older API versions. To migrate to v2 '
|
|
158
|
+
'behavior, remove the `api_versions` configuration setting, and '
|
|
159
|
+
'test against the latest service API versions. See '
|
|
160
|
+
'https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
161
|
+
'cliv2-migration-changes.html#cliv2-migration-api-versions.\n',
|
|
162
|
+
out_file = sys.stderr
|
|
163
|
+
)
|
|
164
|
+
if session.full_config.get('plugins', {}):
|
|
165
|
+
uni_print(
|
|
166
|
+
'\nAWS CLI v2 UPGRADE WARNING: In AWS CLI v2, plugins are '
|
|
167
|
+
'disabled by default, and support for plugins is provisional. '
|
|
168
|
+
'This is different from v1 behavior, where plugin support is URL '
|
|
169
|
+
'below to update your configuration to enable plugins in AWS CLI '
|
|
170
|
+
'v2. Also, be sure to lock into a particular version of the AWS '
|
|
171
|
+
'CLI and test the functionality of your plugins every time AWS '
|
|
172
|
+
'CLI v2 is upgraded. See https://docs.aws.amazon.com/cli/latest/'
|
|
173
|
+
'userguide/cliv2-migration-changes.html'
|
|
174
|
+
'#cliv2-migration-profile-plugins.\n',
|
|
175
|
+
out_file=sys.stderr
|
|
176
|
+
)
|
|
177
|
+
if (
|
|
178
|
+
parsed_args.command == 'ecr' and
|
|
179
|
+
remaining_args is not None and
|
|
180
|
+
remaining_args[0] == 'get-login'
|
|
181
|
+
):
|
|
182
|
+
uni_print(
|
|
183
|
+
'\nAWS CLI v2 UPGRADE WARNING: The `ecr get-login` command has '
|
|
184
|
+
'been removed in AWS CLI v2. You must use `ecr get-login-password` '
|
|
185
|
+
'instead. See https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
186
|
+
'cliv2-migration-changes.html#cliv2-migration-ecr-get-login.\n',
|
|
187
|
+
out_file=sys.stderr
|
|
188
|
+
)
|
|
189
|
+
for working, obsolete in HIDDEN_ALIASES.items():
|
|
190
|
+
working_split = working.split('.')
|
|
191
|
+
working_service = working_split[0]
|
|
192
|
+
working_cmd = working_split[1]
|
|
193
|
+
working_param = working_split[2]
|
|
194
|
+
if (
|
|
195
|
+
parsed_args.command == working_service
|
|
196
|
+
and remaining_args is not None
|
|
197
|
+
and remaining_args[0] == working_cmd
|
|
198
|
+
and f"--{working_param}" in remaining_args
|
|
199
|
+
):
|
|
200
|
+
uni_print(
|
|
201
|
+
'\nAWS CLI v2 UPGRADE WARNING: You have entered command '
|
|
202
|
+
'arguments that use at least 1 of 21 built-in ("hidden") '
|
|
203
|
+
'aliases that were removed in AWS CLI v2. For this command '
|
|
204
|
+
'to work in AWS CLI v2, you must replace usage of the alias '
|
|
205
|
+
'with the corresponding parameter in AWS CLI v2. See '
|
|
206
|
+
'https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
207
|
+
'cliv2-migration-changes.html#cliv2-migration-aliases.\n',
|
|
208
|
+
out_file=sys.stderr
|
|
209
|
+
)
|
|
210
|
+
# Register against the provide-client-params event to ensure that the
|
|
211
|
+
# feature ID is registered before any API requests are made. We
|
|
212
|
+
# cannot register the feature ID in this function because no
|
|
213
|
+
# botocore context is created at this point.
|
|
214
|
+
session.register(
|
|
215
|
+
'provide-client-params.*.*',
|
|
216
|
+
_register_v2_debug_feature_id
|
|
217
|
+
)
|
|
218
|
+
session.register('choose-signer.s3.*', warn_if_sigv2)
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def _register_v2_debug_feature_id(params, model, **kwargs):
|
|
222
|
+
register_feature_id('CLI_V1_TO_V2_MIGRATION_DEBUG_MODE')
|
|
223
|
+
|
|
224
|
+
def warn_if_east_configured_global_endpoint(request, operation_name, **kwargs):
|
|
225
|
+
# The regional us-east-1 endpoint is used in certain cases (e.g.
|
|
226
|
+
# FIPS/Dual-Stack is enabled). Rather than duplicating this logic
|
|
227
|
+
# from botocore, we check the endpoint URL directly.
|
|
228
|
+
parsed_url = urlparse.urlparse(request.url)
|
|
229
|
+
if parsed_url.hostname.endswith('s3.amazonaws.com'):
|
|
230
|
+
uni_print(
|
|
231
|
+
'\nAWS CLI v2 UPGRADE WARNING: When you configure AWS CLI v2 to '
|
|
232
|
+
'use the `us-east-1` region, it uses the true regional endpoint '
|
|
233
|
+
'rather than the global endpoint. This is different from v1 '
|
|
234
|
+
'behavior, where the global endpoint would be used when the '
|
|
235
|
+
'region is `us-east-1`. To retain AWS CLI v1 behavior in AWS '
|
|
236
|
+
'CLI v2, configure the region setting to `aws-global`. See '
|
|
237
|
+
'https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
238
|
+
'cliv2-migration-changes.html'
|
|
239
|
+
'#cliv2-migration-s3-regional-endpoint.\n',
|
|
240
|
+
out_file=sys.stderr
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
def warn_if_sigv2(
|
|
244
|
+
signing_name,
|
|
245
|
+
region_name,
|
|
246
|
+
signature_version,
|
|
247
|
+
context,
|
|
248
|
+
**kwargs
|
|
249
|
+
):
|
|
250
|
+
if context.get('auth_type', None) == 'v2':
|
|
251
|
+
uni_print(
|
|
252
|
+
'\nAWS CLI v2 UPGRADE WARNING: The AWS CLI v2 only uses Signature '
|
|
253
|
+
'v4 to authenticate Amazon S3 requests. This is different from '
|
|
254
|
+
'v1 behavior, where the signature used for Amazon S3 requests may '
|
|
255
|
+
'vary depending on configuration settings, region, and the '
|
|
256
|
+
'bucket being used. To migrate to AWS CLI v2 behavior, configure '
|
|
257
|
+
'the Signature Version S3 setting to version 4. See '
|
|
258
|
+
'https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
259
|
+
'cliv2-migration-changes.html#cliv2-migration-sigv4.\n',
|
|
260
|
+
out_file=sys.stderr
|
|
261
|
+
)
|
|
93
262
|
|
|
94
263
|
def resolve_cli_read_timeout(parsed_args, session, **kwargs):
|
|
95
264
|
arg_name = 'read_timeout'
|
|
@@ -33,7 +33,7 @@ from botocore.exceptions import DataNotFoundError, PaginationError
|
|
|
33
33
|
from botocore import model
|
|
34
34
|
|
|
35
35
|
from awscli.arguments import BaseCLIArgument
|
|
36
|
-
|
|
36
|
+
from awscli.utils import resolve_v2_debug_mode
|
|
37
37
|
|
|
38
38
|
logger = logging.getLogger(__name__)
|
|
39
39
|
|
|
@@ -135,6 +135,9 @@ def unify_paging_params(argument_table, operation_model, event_name,
|
|
|
135
135
|
_remove_existing_paging_arguments(argument_table, paginator_config)
|
|
136
136
|
parsed_args_event = event_name.replace('building-argument-table.',
|
|
137
137
|
'operation-args-parsed.')
|
|
138
|
+
call_parameters_event = event_name.replace(
|
|
139
|
+
'building-argument-table', 'calling-command'
|
|
140
|
+
)
|
|
138
141
|
shadowed_args = {}
|
|
139
142
|
add_paging_argument(argument_table, 'starting-token',
|
|
140
143
|
PageArgument('starting-token', STARTING_TOKEN_HELP,
|
|
@@ -168,6 +171,14 @@ def unify_paging_params(argument_table, operation_model, event_name,
|
|
|
168
171
|
partial(check_should_enable_pagination,
|
|
169
172
|
list(_get_all_cli_input_tokens(paginator_config)),
|
|
170
173
|
shadowed_args, argument_table))
|
|
174
|
+
session.register(
|
|
175
|
+
call_parameters_event,
|
|
176
|
+
partial(
|
|
177
|
+
check_should_enable_pagination_call_parameters,
|
|
178
|
+
session,
|
|
179
|
+
list(_get_all_input_tokens(paginator_config)),
|
|
180
|
+
),
|
|
181
|
+
)
|
|
171
182
|
|
|
172
183
|
|
|
173
184
|
def add_paging_argument(argument_table, arg_name, argument, shadowed_args):
|
|
@@ -240,6 +251,18 @@ def _get_all_cli_input_tokens(pagination_config):
|
|
|
240
251
|
yield cli_name
|
|
241
252
|
|
|
242
253
|
|
|
254
|
+
# Get all tokens but return them in API namespace rather than CLI namespace
|
|
255
|
+
def _get_all_input_tokens(pagination_config):
|
|
256
|
+
# Get all input tokens including the limit_key
|
|
257
|
+
# if it exists.
|
|
258
|
+
tokens = _get_input_tokens(pagination_config)
|
|
259
|
+
for token_name in tokens:
|
|
260
|
+
yield token_name
|
|
261
|
+
if 'limit_key' in pagination_config:
|
|
262
|
+
key_name = pagination_config['limit_key']
|
|
263
|
+
yield key_name
|
|
264
|
+
|
|
265
|
+
|
|
243
266
|
def _get_input_tokens(pagination_config):
|
|
244
267
|
tokens = pagination_config['input_token']
|
|
245
268
|
if not isinstance(tokens, list):
|
|
@@ -253,6 +276,48 @@ def _get_cli_name(param_objects, token_name):
|
|
|
253
276
|
return param.cli_name.lstrip('-')
|
|
254
277
|
|
|
255
278
|
|
|
279
|
+
def check_should_enable_pagination_call_parameters(
|
|
280
|
+
session,
|
|
281
|
+
input_tokens,
|
|
282
|
+
call_parameters,
|
|
283
|
+
parsed_args,
|
|
284
|
+
parsed_globals,
|
|
285
|
+
**kwargs
|
|
286
|
+
):
|
|
287
|
+
"""
|
|
288
|
+
Check for pagination args in the actual calling arguments passed to
|
|
289
|
+
the function.
|
|
290
|
+
|
|
291
|
+
If the user is using the --cli-input-json parameter to provide JSON
|
|
292
|
+
parameters they are all in the API naming space rather than the CLI
|
|
293
|
+
naming space and would be missed by the processing above. This function
|
|
294
|
+
gets called on the calling-command event.
|
|
295
|
+
"""
|
|
296
|
+
if resolve_v2_debug_mode(parsed_globals):
|
|
297
|
+
cli_input_json_data = session.emit_first_non_none_response(
|
|
298
|
+
f"get-cli-input-json-data",
|
|
299
|
+
)
|
|
300
|
+
if cli_input_json_data is None:
|
|
301
|
+
cli_input_json_data = {}
|
|
302
|
+
pagination_params_in_input_tokens = [
|
|
303
|
+
param for param in cli_input_json_data if param in input_tokens
|
|
304
|
+
]
|
|
305
|
+
if pagination_params_in_input_tokens:
|
|
306
|
+
uni_print(
|
|
307
|
+
'\nAWS CLI v2 UPGRADE WARNING: In AWS CLI v2, if you specify '
|
|
308
|
+
'pagination parameters by using a file with the '
|
|
309
|
+
'`--cli-input-json` parameter, automatic pagination will be '
|
|
310
|
+
'turned off. This is different from v1 behavior, where '
|
|
311
|
+
'pagination parameters specified via the `--cli-input-json` '
|
|
312
|
+
'parameter are ignored. To retain AWS CLI v1 behavior in '
|
|
313
|
+
'AWS CLI v2, remove all pagination parameters from the input '
|
|
314
|
+
'JSON. See https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
315
|
+
'cliv2-migration-changes.html'
|
|
316
|
+
'#cliv2-migration-skeleton-paging.\n',
|
|
317
|
+
out_file=sys.stderr
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
|
|
256
321
|
class PageArgument(BaseCLIArgument):
|
|
257
322
|
type_map = {
|
|
258
323
|
'string': str,
|
|
@@ -36,7 +36,7 @@ from awscli.customizations.utils import uni_print
|
|
|
36
36
|
from awscli.customizations.s3.syncstrategy.base import MissingFileSync, \
|
|
37
37
|
SizeAndLastModifiedSync, NeverSync
|
|
38
38
|
from awscli.customizations.s3 import transferconfig
|
|
39
|
-
|
|
39
|
+
from awscli.utils import resolve_v2_debug_mode
|
|
40
40
|
|
|
41
41
|
LOGGER = logging.getLogger(__name__)
|
|
42
42
|
|
|
@@ -767,6 +767,7 @@ class S3TransferCommand(S3Command):
|
|
|
767
767
|
cmd_params.add_verify_ssl(parsed_globals)
|
|
768
768
|
cmd_params.add_page_size(parsed_args)
|
|
769
769
|
cmd_params.add_paths(parsed_args.paths)
|
|
770
|
+
cmd_params.add_v2_debug(parsed_globals)
|
|
770
771
|
|
|
771
772
|
runtime_config = transferconfig.RuntimeConfig().build_config(
|
|
772
773
|
**self._session.get_scoped_config().get('s3', {}))
|
|
@@ -1056,6 +1057,24 @@ class CommandArchitecture(object):
|
|
|
1056
1057
|
result_queue = queue.Queue()
|
|
1057
1058
|
operation_name = cmd_translation[paths_type]
|
|
1058
1059
|
|
|
1060
|
+
if self.parameters['v2_debug']:
|
|
1061
|
+
if operation_name == 'copy':
|
|
1062
|
+
uni_print(
|
|
1063
|
+
'\nAWS CLI v2 UPGRADE WARNING: In AWS CLI v2, object '
|
|
1064
|
+
'properties will be copied from the source in multipart '
|
|
1065
|
+
'copies between S3 buckets initiated via `aws s3` '
|
|
1066
|
+
'commands, resulting in additional S3 API calls to '
|
|
1067
|
+
'transfer the metadata. Note that the principal must '
|
|
1068
|
+
'have permission to call these APIs, or the command may '
|
|
1069
|
+
'fail. This is different from v1 behavior, where metadata '
|
|
1070
|
+
'is not copied. For guidance on retaining v1 behavior in '
|
|
1071
|
+
'AWS CLI v2, or for more details, see '
|
|
1072
|
+
'https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
1073
|
+
'cliv2-migration-changes.html'
|
|
1074
|
+
'#cliv2-migration-s3-copy-metadata.\n\n',
|
|
1075
|
+
out_file=sys.stderr
|
|
1076
|
+
)
|
|
1077
|
+
|
|
1059
1078
|
fgen_kwargs = {
|
|
1060
1079
|
'client': self._source_client, 'operation_name': operation_name,
|
|
1061
1080
|
'follow_symlinks': self.parameters['follow_symlinks'],
|
|
@@ -1447,6 +1466,9 @@ class CommandParameters(object):
|
|
|
1447
1466
|
def add_page_size(self, parsed_args):
|
|
1448
1467
|
self.parameters['page_size'] = getattr(parsed_args, 'page_size', None)
|
|
1449
1468
|
|
|
1469
|
+
def add_v2_debug(self, parsed_globals):
|
|
1470
|
+
self.parameters['v2_debug'] = resolve_v2_debug_mode(parsed_globals)
|
|
1471
|
+
|
|
1450
1472
|
def _validate_sse_c_args(self):
|
|
1451
1473
|
self._validate_sse_c_arg()
|
|
1452
1474
|
self._validate_sse_c_arg('sse_c_copy_source')
|
|
@@ -27,9 +27,14 @@ There's nothing currently done for timestamps, but this will change
|
|
|
27
27
|
in the future.
|
|
28
28
|
|
|
29
29
|
"""
|
|
30
|
+
import sys
|
|
31
|
+
|
|
30
32
|
from botocore.utils import parse_timestamp
|
|
31
33
|
from botocore.exceptions import ProfileNotFound
|
|
32
34
|
|
|
35
|
+
from awscli.customizations.utils import uni_print
|
|
36
|
+
from awscli.utils import resolve_v2_debug_mode
|
|
37
|
+
|
|
33
38
|
|
|
34
39
|
def register_scalar_parser(event_handlers):
|
|
35
40
|
event_handlers.register_first(
|
|
@@ -44,12 +49,20 @@ def iso_format(value):
|
|
|
44
49
|
return parse_timestamp(value).isoformat()
|
|
45
50
|
|
|
46
51
|
|
|
47
|
-
def add_timestamp_parser(session):
|
|
52
|
+
def add_timestamp_parser(session, v2_debug=False):
|
|
48
53
|
factory = session.get_component('response_parser_factory')
|
|
54
|
+
print_v2_debug_warnings = v2_debug
|
|
49
55
|
try:
|
|
50
56
|
timestamp_format = session.get_scoped_config().get(
|
|
51
57
|
'cli_timestamp_format',
|
|
52
|
-
|
|
58
|
+
None)
|
|
59
|
+
if timestamp_format is not None:
|
|
60
|
+
# We do not want to print v2 debug warnings if the user explicitly
|
|
61
|
+
# configured the cli_timestamp_format, they would not be
|
|
62
|
+
# broken in that case.
|
|
63
|
+
print_v2_debug_warnings = False
|
|
64
|
+
else:
|
|
65
|
+
timestamp_format = 'wire'
|
|
53
66
|
except ProfileNotFound:
|
|
54
67
|
# If a --profile is provided that does not exist, loading
|
|
55
68
|
# a value from get_scoped_config will crash the CLI.
|
|
@@ -66,7 +79,31 @@ def add_timestamp_parser(session):
|
|
|
66
79
|
# parser (which parses to a datetime.datetime object) with the
|
|
67
80
|
# identity function which prints the date exactly the same as it comes
|
|
68
81
|
# across the wire.
|
|
69
|
-
|
|
82
|
+
encountered_timestamp = False
|
|
83
|
+
def identity_with_warning(x):
|
|
84
|
+
# To prevent printing the same warning for each timestamp in the
|
|
85
|
+
# response, we utilize a reference to a nonlocal variable to track
|
|
86
|
+
# if we have already printed the warning.
|
|
87
|
+
nonlocal encountered_timestamp
|
|
88
|
+
if not encountered_timestamp:
|
|
89
|
+
encountered_timestamp = True
|
|
90
|
+
uni_print(
|
|
91
|
+
'\nAWS CLI v2 UPGRADE WARNING: In AWS CLI v2, all '
|
|
92
|
+
'timestamp response values are returned in the ISO 8601 '
|
|
93
|
+
'format. This is different from v1 behavior, where the '
|
|
94
|
+
'timestamps are returned as they appear in the service '
|
|
95
|
+
'API response. To retain AWS CLI v1 behavior in AWS CLI '
|
|
96
|
+
'v2, set the configuration variable '
|
|
97
|
+
'`cli_timestamp_format` to `wire`. See '
|
|
98
|
+
'https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
99
|
+
'cliv2-migration-changes.html'
|
|
100
|
+
'#cliv2-migration-timestamp.\n',
|
|
101
|
+
out_file=sys.stderr
|
|
102
|
+
)
|
|
103
|
+
return identity(x)
|
|
104
|
+
|
|
105
|
+
timestamp_parser = identity_with_warning \
|
|
106
|
+
if print_v2_debug_warnings else identity
|
|
70
107
|
elif timestamp_format == 'iso8601':
|
|
71
108
|
timestamp_parser = iso_format
|
|
72
109
|
else:
|
|
@@ -75,7 +112,7 @@ def add_timestamp_parser(session):
|
|
|
75
112
|
factory.set_parser_defaults(timestamp_parser=timestamp_parser)
|
|
76
113
|
|
|
77
114
|
|
|
78
|
-
def add_scalar_parsers(session, **kwargs):
|
|
115
|
+
def add_scalar_parsers(session, parsed_args=None, **kwargs):
|
|
79
116
|
factory = session.get_component('response_parser_factory')
|
|
80
117
|
factory.set_parser_defaults(blob_parser=identity)
|
|
81
|
-
add_timestamp_parser(session)
|
|
118
|
+
add_timestamp_parser(session, resolve_v2_debug_mode(parsed_args))
|
awscli/data/cli.json
CHANGED
|
@@ -64,6 +64,11 @@
|
|
|
64
64
|
"dest": "connect_timeout",
|
|
65
65
|
"type": "int",
|
|
66
66
|
"help": "<p>The maximum socket connect time in seconds. If the value is set to 0, the socket connect will be blocking and not timeout. The default value is 60 seconds.</p>"
|
|
67
|
+
},
|
|
68
|
+
"v2-debug": {
|
|
69
|
+
"action": "store_true",
|
|
70
|
+
"dest": "v2_debug",
|
|
71
|
+
"help": "<p>Enable AWS CLI v2 migration assistance. Prints warnings if the command would face a breaking change after swapping AWS CLI v1 for AWS CLI v2 in the current environment. Prints one warning for each breaking change detected.</p>"
|
|
67
72
|
}
|
|
68
73
|
}
|
|
69
74
|
}
|
|
@@ -70,3 +70,7 @@
|
|
|
70
70
|
|
|
71
71
|
The maximum socket connect time in seconds. If the value is set to 0, the socket connect will be blocking and not timeout. The default value is 60 seconds.
|
|
72
72
|
|
|
73
|
+
``--v2-debug`` (boolean)
|
|
74
|
+
|
|
75
|
+
Enable AWS CLI v2 migration assistance. Prints warnings if the command would face a breaking change after swapping AWS CLI v1 for AWS CLI v2 in the current environment. Prints one warning for each breaking change detected.
|
|
76
|
+
|
awscli/paramfile.py
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
11
|
# ANY KIND, either express or implied. See the License for the specific
|
|
12
12
|
# language governing permissions and limitations under the License.
|
|
13
|
+
import sys
|
|
14
|
+
|
|
13
15
|
import copy
|
|
14
16
|
import logging
|
|
15
17
|
import os
|
|
@@ -20,6 +22,7 @@ from botocore.httpsession import URLLib3Session
|
|
|
20
22
|
|
|
21
23
|
from awscli import argprocess
|
|
22
24
|
from awscli.compat import compat_open
|
|
25
|
+
from awscli.utils import resolve_v2_debug_mode
|
|
23
26
|
|
|
24
27
|
logger = logging.getLogger(__name__)
|
|
25
28
|
|
|
@@ -166,7 +169,7 @@ class URIArgumentHandler:
|
|
|
166
169
|
prefixes.update(REMOTE_PREFIX_MAP)
|
|
167
170
|
self._prefixes = prefixes
|
|
168
171
|
|
|
169
|
-
def __call__(self, event_name, param, value, **kwargs):
|
|
172
|
+
def __call__(self, event_name, param, value, parsed_globals=None, **kwargs):
|
|
170
173
|
"""Handler that supports param values from URIs."""
|
|
171
174
|
cli_argument = param
|
|
172
175
|
qualified_param_name = '.'.join(event_name.split('.')[1:])
|
|
@@ -175,13 +178,27 @@ class URIArgumentHandler:
|
|
|
175
178
|
):
|
|
176
179
|
return
|
|
177
180
|
else:
|
|
178
|
-
return self._check_for_uri_param(cli_argument, value)
|
|
181
|
+
return self._check_for_uri_param(cli_argument, value, parsed_globals)
|
|
179
182
|
|
|
180
|
-
def _check_for_uri_param(self, param, value):
|
|
183
|
+
def _check_for_uri_param(self, param, value, parsed_globals):
|
|
181
184
|
if isinstance(value, list) and len(value) == 1:
|
|
182
185
|
value = value[0]
|
|
183
186
|
try:
|
|
184
|
-
|
|
187
|
+
param_file = get_paramfile(value, self._prefixes)
|
|
188
|
+
if param_file is not None and resolve_v2_debug_mode(parsed_globals):
|
|
189
|
+
print(
|
|
190
|
+
'\nAWS CLI v2 UPGRADE WARNING: For input parameters that '
|
|
191
|
+
'have a prefix of `http://` or `https://`, AWS CLI v2 '
|
|
192
|
+
'will not automatically request the content of the URL '
|
|
193
|
+
'for the parameter, and the `cli_follow_urlparam` option '
|
|
194
|
+
'has been removed. For guidance on how to adapt this '
|
|
195
|
+
'command to AWS CLI v2 usage, see '
|
|
196
|
+
'https://docs.aws.amazon.com/cli/latest/userguide/'
|
|
197
|
+
'cliv2-migration-changes.html'
|
|
198
|
+
'#cliv2-migration-paramfile.\n',
|
|
199
|
+
file=sys.stderr,
|
|
200
|
+
)
|
|
201
|
+
return param_file
|
|
185
202
|
except ResourceLoadingError as e:
|
|
186
203
|
raise argprocess.ParamError(param.cli_name, str(e))
|
|
187
204
|
|
awscli/utils.py
CHANGED
|
@@ -134,6 +134,18 @@ def find_service_and_method_in_event_name(event_name):
|
|
|
134
134
|
return service_name, operation_name
|
|
135
135
|
|
|
136
136
|
|
|
137
|
+
def resolve_v2_debug_mode(args):
|
|
138
|
+
# Resolve whether v2-debug mode is enabled,
|
|
139
|
+
# following the correct precedence order.
|
|
140
|
+
if args is None:
|
|
141
|
+
return False
|
|
142
|
+
if getattr(args, 'v2_debug', False):
|
|
143
|
+
return True
|
|
144
|
+
if os.environ.get('AWS_CLI_UPGRADE_DEBUG_MODE', '').lower() == 'true':
|
|
145
|
+
return True
|
|
146
|
+
return False
|
|
147
|
+
|
|
148
|
+
|
|
137
149
|
def is_document_type(shape):
|
|
138
150
|
"""Check if shape is a document type"""
|
|
139
151
|
return getattr(shape, 'is_document_type', False)
|
|
@@ -205,8 +217,13 @@ def ignore_ctrl_c():
|
|
|
205
217
|
signal.signal(signal.SIGINT, original)
|
|
206
218
|
|
|
207
219
|
|
|
208
|
-
def emit_top_level_args_parsed_event(session, args):
|
|
209
|
-
session.emit(
|
|
220
|
+
def emit_top_level_args_parsed_event(session, args, remaining=None):
|
|
221
|
+
session.emit(
|
|
222
|
+
'top-level-args-parsed',
|
|
223
|
+
parsed_args=args,
|
|
224
|
+
session=session,
|
|
225
|
+
remaining_args=remaining,
|
|
226
|
+
)
|
|
210
227
|
|
|
211
228
|
|
|
212
229
|
def is_a_tty():
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: awscli
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.44.0
|
|
4
4
|
Summary: Universal Command Line Environment for AWS.
|
|
5
5
|
Home-page: http://aws.amazon.com/cli/
|
|
6
6
|
Author: Amazon Web Services
|
|
@@ -24,7 +24,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.14
|
|
25
25
|
Requires-Python: >= 3.9
|
|
26
26
|
License-File: LICENSE.txt
|
|
27
|
-
Requires-Dist: botocore (==1.42.
|
|
27
|
+
Requires-Dist: botocore (==1.42.10)
|
|
28
28
|
Requires-Dist: docutils (<=0.19,>=0.18.1)
|
|
29
29
|
Requires-Dist: s3transfer (<0.17.0,>=0.16.0)
|
|
30
30
|
Requires-Dist: PyYAML (<6.1,>=3.10)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
awscli/__init__.py,sha256=
|
|
1
|
+
awscli/__init__.py,sha256=Bb0j8e0Qff7rUYNdSHALkVSPHd5heIyXQh7IWNumE4Q,1533
|
|
2
2
|
awscli/__main__.py,sha256=iBjOg0tBxNlhzTi_tyc1G0SMGBvHMVvBJzX3JqYaooY,662
|
|
3
|
-
awscli/alias.py,sha256=
|
|
3
|
+
awscli/alias.py,sha256=gB5jGInOl97UbgwGuKCjR_a_VudK0lAV1W6U_zeetZA,11348
|
|
4
4
|
awscli/argparser.py,sha256=3Pxx-vWytdV985Y6MIl9DeutUXyehIvACIs_PDby8GI,7650
|
|
5
|
-
awscli/argprocess.py,sha256=
|
|
5
|
+
awscli/argprocess.py,sha256=e_EgHOAkdBHQEFCPf-mFcq7MHox8dLC3kJYxGSzA0Ps,21235
|
|
6
6
|
awscli/arguments.py,sha256=7uRbPe8rK56rpgEHD2gx9-GS-Yv1iJuWd_aooj7ebYY,18827
|
|
7
7
|
awscli/clidocs.py,sha256=VWu0ECPAt1MZwdCTqdrrzrRDputralHKzyozt7LOOho,32615
|
|
8
|
-
awscli/clidriver.py,sha256=
|
|
8
|
+
awscli/clidriver.py,sha256=REnBxLQWqPjxhkaNpSjCZuIOF0hxdkeBBMEWeMAMa_w,28578
|
|
9
9
|
awscli/commands.py,sha256=fJVPJajqYCl9pieIphIVYYQvbwdCbufkDj87I7W0JwE,2097
|
|
10
10
|
awscli/compat.py,sha256=_W9vVZnQTVx0o_hKiEuauCZgQgKkqGK4zGGT44rsaCU,16835
|
|
11
11
|
awscli/completer.py,sha256=vNCS1kr1Q_JO8fLh5YGwfUK3sSaDp3k8rrpa_cCIgY4,5986
|
|
@@ -13,7 +13,7 @@ awscli/errorhandler.py,sha256=2bIBZrKvFICKAhoD180Cx7rRX608pG9RHsmlAcRb0wc,3139
|
|
|
13
13
|
awscli/formatter.py,sha256=EI_dUo5uGf2YxWg5js4un_cksF5h58KuvOkkmptuu4o,10951
|
|
14
14
|
awscli/handlers.py,sha256=6isJ2Oo4N1tX8yh2GT4v1PKMqZraCNuH1Mb-7MLjIPs,10710
|
|
15
15
|
awscli/help.py,sha256=-u2OtAdW9X8891FBA70xUC5Ky9lhjiWgtbh4hm-DoW8,14205
|
|
16
|
-
awscli/paramfile.py,sha256=
|
|
16
|
+
awscli/paramfile.py,sha256=3ZmlqMyi_2pcEA5noWzfGONA6CH-4OsIJqtUZrF7yH0,11810
|
|
17
17
|
awscli/plugin.py,sha256=B3wgRerhgFK1v-QQeASYv2VNLSa9oMuD4X_hcLSescI,2265
|
|
18
18
|
awscli/schema.py,sha256=vNFkuE2BsgeqesRTWRhuSU341eqiKuMF5QAJvClyaKw,6394
|
|
19
19
|
awscli/shorthand.py,sha256=ziXUkFyJGcDG8dMQzDMgdUSpZpe88gGBRk5Skkg60W4,18379
|
|
@@ -21,7 +21,7 @@ awscli/table.py,sha256=VCyPjNHK4wO_-KKRz7zvuuNp2RLHb6DUPVbPdueji3w,15459
|
|
|
21
21
|
awscli/testutils.py,sha256=JiJvwrZWtACRuVbRYfQthbZTE8LrFA7WOMg09pD7Pys,36979
|
|
22
22
|
awscli/text.py,sha256=pr40cSMkGWZ5n-VXMcEKCo1xO5bK3nUbDK3WLwy2HFE,4177
|
|
23
23
|
awscli/topictags.py,sha256=A1HDK4jE2ZxReOVM1sftjInQXVWL1DRz8DLS5JIGMag,12635
|
|
24
|
-
awscli/utils.py,sha256=
|
|
24
|
+
awscli/utils.py,sha256=29k14fL0jIHFTEErNgxIvMlIV3zYwjGDFH7uM9C7vdU,10594
|
|
25
25
|
awscli/bcdoc/__init__.py,sha256=V2g87AefB2DOD9_3xIF5k9Nv5ttb4_gNJOVvSF0Mp3s,588
|
|
26
26
|
awscli/bcdoc/docevents.py,sha256=RErca_G76a310UgXncghXcfoQ26ZNGzmqwJ-xgf8DWM,5027
|
|
27
27
|
awscli/bcdoc/docstringparser.py,sha256=-QMoUsJrmnI-G46YbDm2UACU4jpHXonwouG9CFAlzNg,5679
|
|
@@ -35,18 +35,18 @@ awscli/customizations/arguments.py,sha256=-0uzhdTqrow2DxR_QH10hdthG7fkb5_IzlpYd4
|
|
|
35
35
|
awscli/customizations/assumerole.py,sha256=FUCgT_om8pao6QQyweTpI3sQ-5PPv4TvBUcPBebnAz4,1851
|
|
36
36
|
awscli/customizations/awslambda.py,sha256=JeVW9IVSmFLSwzc7yuf3crFwAl1UZcdEq4jwypLJ5-o,5978
|
|
37
37
|
awscli/customizations/binaryhoist.py,sha256=FAcYkwL7IAGAtwQF1ZjyEZE6iZQr0pPU8IiSFgbierI,3638
|
|
38
|
-
awscli/customizations/cliinputjson.py,sha256=
|
|
38
|
+
awscli/customizations/cliinputjson.py,sha256=06QCMnvkVK2Yhm7jeteAQM6SY9HAZWOCmsglYwkYEmg,4043
|
|
39
39
|
awscli/customizations/cloudfront.py,sha256=bkMmqM2xJ14_6SeSCSglpbWLziMeGgGaPQM56zRwAYo,10648
|
|
40
40
|
awscli/customizations/cloudsearch.py,sha256=0WKfcUTr2l2FhdeJ2FiX5XZXZb5EIIHAbS1d2tVPLko,4494
|
|
41
41
|
awscli/customizations/cloudsearchdomain.py,sha256=_uQctHHxAqSt_d4snYIWS3bEDeordU0jpZLb5xtYjzM,1074
|
|
42
42
|
awscli/customizations/codecommit.py,sha256=04LfxFa24whp4znSmhZ4ReZU66rH9gQUY2wKr_fxhZs,7489
|
|
43
|
-
awscli/customizations/commands.py,sha256=
|
|
43
|
+
awscli/customizations/commands.py,sha256=R1lDaDg1VKjG3fkkurBTgiYILIT6Eak-hooJyY9Uhm4,17187
|
|
44
44
|
awscli/customizations/dynamodb.py,sha256=5s0QK_fhphkjeBhfzm9jbMDh3p2oN7GoCazoJuHz4pQ,1919
|
|
45
45
|
awscli/customizations/ecr.py,sha256=Z-MIwu5Frkpt5_tADojmc1vxwdh8B_AnqVQ48drVgxM,4073
|
|
46
46
|
awscli/customizations/ecr_public.py,sha256=g9HzYsNEqu8Ty0T38YrKtcu65L8nJTmS6DBVe437uVY,1753
|
|
47
47
|
awscli/customizations/flatten.py,sha256=Yl9hPS2k87YqyAVXhaLFSA0KhluhZYTKKLXsM-nsfco,9505
|
|
48
48
|
awscli/customizations/generatecliskeleton.py,sha256=G5j4NRqZxkjgZzWCDyd3W64nQZTBxz7Rd0sZIKMC_M4,5803
|
|
49
|
-
awscli/customizations/globalargs.py,sha256=
|
|
49
|
+
awscli/customizations/globalargs.py,sha256=LwrVYrMYuZQqVSfQUOOI7or9H_bc7GoL8FFzLDJRISY,12798
|
|
50
50
|
awscli/customizations/iamvirtmfa.py,sha256=xoQ2the-0D6t6meJkM1FY7A9KTKape2RCV2a3VAljV4,3278
|
|
51
51
|
awscli/customizations/iot.py,sha256=GvkgUZKcDYjqfWOz160wUS7LVE_YhQ8NDZGzBHqsWc8,2399
|
|
52
52
|
awscli/customizations/iot_data.py,sha256=xswSsC1a049sw_VfG75F8l4GyI1GqrE-ux86U2xGH_8,1303
|
|
@@ -54,7 +54,7 @@ awscli/customizations/kinesis.py,sha256=1s76FC9Kp5vw-2DJKVlkiO50n8NGcLI-Itdrl7dx
|
|
|
54
54
|
awscli/customizations/kms.py,sha256=MG52QeazTZ3xokURUqLK4asagZCThssaXv0Dg1JIOhc,909
|
|
55
55
|
awscli/customizations/mturk.py,sha256=4n0c14Ah9ey11uiuW5n4gMlcMq7PQNuapeGSoOEh2lE,1010
|
|
56
56
|
awscli/customizations/overridesslcommonname.py,sha256=VBxkWk2GJr-Zg3SGUTDUTa0uOsxiC7ErkdTMAKiIonI,6444
|
|
57
|
-
awscli/customizations/paginate.py,sha256=
|
|
57
|
+
awscli/customizations/paginate.py,sha256=NsAhxbBf9dkYdhVffRJ4-hHD1U_cipLRmLT5o_gGPXc,14914
|
|
58
58
|
awscli/customizations/preview.py,sha256=5r4RHFS19pxZ79cimbPgL1YOstOjK9OvgUeaZAP0YA8,5189
|
|
59
59
|
awscli/customizations/putmetricdata.py,sha256=FczJBZUGb4mXtSalD1ihwDSjMSDlxZ5V1jm3KpCi-ps,6914
|
|
60
60
|
awscli/customizations/quicksight.py,sha256=r5XrHPIofOfKVZrE6JGUjDKovkgOf19nrsVVzWOHGDY,1457
|
|
@@ -66,7 +66,7 @@ awscli/customizations/s3errormsg.py,sha256=STKQ3714dnXOzPSPszCikhv5hoRBUJnk-u0kF
|
|
|
66
66
|
awscli/customizations/s3events.py,sha256=ZcNmDN26dXxLrLawawl9jRFWqK1lMEQpty0YRNjBQws,4795
|
|
67
67
|
awscli/customizations/s3uploader.py,sha256=vRz9bBLPby5ZZzBZpkI_SeWezoOmLkmOPeQ9jHemVpU,8133
|
|
68
68
|
awscli/customizations/sagemaker.py,sha256=mlYPscN-aQgV6L8dRK62QolmY7_iDmtHLe6DyGjayD8,1014
|
|
69
|
-
awscli/customizations/scalarparse.py,sha256=
|
|
69
|
+
awscli/customizations/scalarparse.py,sha256=Bgs1HKPMrip79iJZnGWasYHOjre1T4NU6TLo7rVK9NE,5001
|
|
70
70
|
awscli/customizations/sessendemail.py,sha256=uWgx-f0ILiTGKyjoQcJWx8XoG-BIWUkWNBy-yXvYpTU,4459
|
|
71
71
|
awscli/customizations/sessionmanager.py,sha256=751EorlValgvZJi56kuWs54huzWAhw5SZNc3m20Vds8,7047
|
|
72
72
|
awscli/customizations/sms_voice.py,sha256=ZBbvUspzdn7maGzk4tnERA3zMTR3cSbTL0Son6L9Apc,816
|
|
@@ -78,7 +78,7 @@ awscli/customizations/utils.py,sha256=ynbF4xQhY8X5U1SA69V-Ro_-7pSLYZceQ9c0XoGwFd
|
|
|
78
78
|
awscli/customizations/waiters.py,sha256=e0cHfnaOhR0Zz7DCTj3McP_TPfKHEc_JlHyy3uP2CIQ,9860
|
|
79
79
|
awscli/customizations/cloudformation/__init__.py,sha256=rcZDPPnatHSw8I0ogt3eHOL4HKIW3DbUFKEZdf76TEg,1281
|
|
80
80
|
awscli/customizations/cloudformation/artifact_exporter.py,sha256=evvQTSzPkv4bUyYr318HqwQwfkxiz0cMCxfYr8x2R6o,23617
|
|
81
|
-
awscli/customizations/cloudformation/deploy.py,sha256=
|
|
81
|
+
awscli/customizations/cloudformation/deploy.py,sha256=nIBKr1YKlucNrohZqM-WANUQqGxylmG0APWQJfbrAkg,16553
|
|
82
82
|
awscli/customizations/cloudformation/deployer.py,sha256=OVxj1Ai7FTNyuljxTFQU3vqKVy67FcpSnWZ95AI7bNA,9870
|
|
83
83
|
awscli/customizations/cloudformation/exceptions.py,sha256=G5F8FB8lxSzKMHmDZPhl4UdbrjB87mUWaBzgY901JJA,2137
|
|
84
84
|
awscli/customizations/cloudformation/package.py,sha256=cugfhLY2R8ZY97kOK_XLd9GfK8PxF0LVN1xe4mirEkU,6116
|
|
@@ -197,7 +197,7 @@ awscli/customizations/s3/filters.py,sha256=OuQUr6XAMkS1i6GO65_L7NbL7kwgmKT2ghWhv
|
|
|
197
197
|
awscli/customizations/s3/results.py,sha256=L19gi3CtJYeHqWIWuIVcbj82Dshw2g5jNX8PFidcC2U,26625
|
|
198
198
|
awscli/customizations/s3/s3.py,sha256=Igwsn89G7i9M4nShjzcFmwlCVXvpfgmoyEf9wpNLXdk,2739
|
|
199
199
|
awscli/customizations/s3/s3handler.py,sha256=0eu6OC5UHEGyjFztOOq9OOLqK3XUHfiaeT2U6EpcHlU,23494
|
|
200
|
-
awscli/customizations/s3/subcommands.py,sha256=
|
|
200
|
+
awscli/customizations/s3/subcommands.py,sha256=E-xJCFNQ8f_r95dkk4P0cw_UpxVQ1UnGbXv6fd700F8,64544
|
|
201
201
|
awscli/customizations/s3/transferconfig.py,sha256=7MW4hi90N5mLeQBlmVxs9J5ixRjejp1F4uPmGGF3TME,4472
|
|
202
202
|
awscli/customizations/s3/utils.py,sha256=qBCU--yBVoD2t_76IdePQcbphQrvMQe-Sym_F4OyISM,34494
|
|
203
203
|
awscli/customizations/s3/syncstrategy/__init__.py,sha256=BFJ0dbdWkUBgJ2qav1Jhz06SddTMIeahxSaW_H0vop0,565
|
|
@@ -214,9 +214,9 @@ awscli/customizations/servicecatalog/generateproduct.py,sha256=k9iKmrZxi3_iD8JmU
|
|
|
214
214
|
awscli/customizations/servicecatalog/generateprovisioningartifact.py,sha256=hgkvZ8ktGW9hoFQuR58MQKo-dWNOiKgDBIfShE8pFtw,3367
|
|
215
215
|
awscli/customizations/servicecatalog/helptext.py,sha256=jwtDliDWnv8UeijDKGMEmRvwWpLmEUi02hxvE_ijmek,1945
|
|
216
216
|
awscli/customizations/servicecatalog/utils.py,sha256=8J4K6z2IVsxiD9Eathl7XvBcIJjo2U7ZVABhvSrKAz8,1173
|
|
217
|
-
awscli/data/cli.json,sha256=
|
|
218
|
-
awscli/examples/global_options.rst,sha256=
|
|
219
|
-
awscli/examples/global_synopsis.rst,sha256=
|
|
217
|
+
awscli/data/cli.json,sha256=om2SM7gOHt1JL4UWd1rBeJbJPOYWZDENKfpz0dj6VkU,3499
|
|
218
|
+
awscli/examples/global_options.rst,sha256=llDWxHZCXAOgS_pSf6jQHn54xaD8B86XIlkz2k5aGdo,1984
|
|
219
|
+
awscli/examples/global_synopsis.rst,sha256=G31esf-gJ1EDbtt5uFS3I5gb9GaHkQmcfjlAy2IvgX0,299
|
|
220
220
|
awscli/examples/accessanalyzer/apply-archive-rule.rst,sha256=vqUyx0wCfzJBLqXxA7S93LhM6pJlTqbnj5IN4y3oq64,623
|
|
221
221
|
awscli/examples/accessanalyzer/cancel-policy-generation.rst,sha256=AD3DbJjtAHLhg6AB015mdnBzluUXVqIDa7t-HxvqN0w,484
|
|
222
222
|
awscli/examples/accessanalyzer/check-access-not-granted.rst,sha256=odK2SA7pUxlhkkQUrkC4z9sKQIkQsCqdvfSYvATFhu4,1235
|
|
@@ -6061,13 +6061,13 @@ awscli/topics/return-codes.rst,sha256=d9lpNFZwD75IiYcDEADQzu-4QiR8P28UPHkrNwPV5J
|
|
|
6061
6061
|
awscli/topics/s3-config.rst,sha256=5EIVd4ggLBHtzjtHFvQp9hY415yMGZiG7S_rO9qy2t0,11663
|
|
6062
6062
|
awscli/topics/s3-faq.rst,sha256=9qO0HFI6F9hx1wVEUDl8Jy6yoCUd9zbtv-Z0Re4dsiw,2934
|
|
6063
6063
|
awscli/topics/topic-tags.json,sha256=6lUSrs3FKCZNRSQMnjcXNgWyRNGjZIeur1988a4IO5o,1577
|
|
6064
|
-
awscli-1.
|
|
6065
|
-
awscli-1.
|
|
6066
|
-
awscli-1.
|
|
6067
|
-
awscli-1.
|
|
6068
|
-
awscli-1.
|
|
6069
|
-
awscli-1.
|
|
6070
|
-
awscli-1.
|
|
6071
|
-
awscli-1.
|
|
6072
|
-
awscli-1.
|
|
6073
|
-
awscli-1.
|
|
6064
|
+
awscli-1.44.0.data/scripts/aws,sha256=r24FExgs0-JjILTQ3XZAqXBYE4SV6UMTtALkLGAj86g,805
|
|
6065
|
+
awscli-1.44.0.data/scripts/aws.cmd,sha256=s46DkC6LNgX63CIkzxxbPnFMJ6DRDBkvc88GnWa8Pvg,1432
|
|
6066
|
+
awscli-1.44.0.data/scripts/aws_bash_completer,sha256=RRpoEGJRagRzyHZKZZOwpltuVYv2EoiZsdXhmyWPZ54,204
|
|
6067
|
+
awscli-1.44.0.data/scripts/aws_completer,sha256=oC9kuMDlWE47dWk_4xjPde2PQvN-M0vND0J4YSLabVQ,1126
|
|
6068
|
+
awscli-1.44.0.data/scripts/aws_zsh_completer.sh,sha256=Qm6Z8ejNAMzpJjaT0pzqxbSDT2zxdmzVe5haRA7qLoc,1808
|
|
6069
|
+
awscli-1.44.0.dist-info/LICENSE.txt,sha256=o5XhFlwu0OK_BBrijlKCRa7dQAm36UrUB3gCV_cEr8E,549
|
|
6070
|
+
awscli-1.44.0.dist-info/METADATA,sha256=JC-L-zCDrlZi2H94eNSBYb7ZdvO_rza3ea6_iAN6Cjg,11200
|
|
6071
|
+
awscli-1.44.0.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
|
6072
|
+
awscli-1.44.0.dist-info/top_level.txt,sha256=vt9wXFr1_nGYK6abhJgt6zY3fULe4JSZedm_5XOM9S0,7
|
|
6073
|
+
awscli-1.44.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|