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 CHANGED
@@ -18,7 +18,7 @@ A Universal Command Line Environment for Amazon Web Services.
18
18
 
19
19
  import os
20
20
 
21
- __version__ = '1.43.14'
21
+ __version__ = '1.44.0'
22
22
 
23
23
  #
24
24
  # Get our data path to be added to botocore's search path
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 create_nested_client, write_exception
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,
@@ -154,7 +154,8 @@ class BasicCommand(CLICommand):
154
154
  'custom',
155
155
  self.name,
156
156
  cli_argument,
157
- value
157
+ value,
158
+ parsed_globals
158
159
  )
159
160
 
160
161
  # If this parameter has a schema defined, then allow plugins
@@ -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
- 'wire')
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
- timestamp_parser = identity
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
+
@@ -12,3 +12,4 @@
12
12
  [--ca-bundle <value>]
13
13
  [--cli-read-timeout <value>]
14
14
  [--cli-connect-timeout <value>]
15
+ [--v2-debug]
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
- return get_paramfile(value, self._prefixes)
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('top-level-args-parsed', parsed_args=args, session=session)
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.43.14
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.8)
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=MaiJMa2t6FakE6yu3LT1omxpziefPLncSmuwGOb-Vhk,1534
1
+ awscli/__init__.py,sha256=Bb0j8e0Qff7rUYNdSHALkVSPHd5heIyXQh7IWNumE4Q,1533
2
2
  awscli/__main__.py,sha256=iBjOg0tBxNlhzTi_tyc1G0SMGBvHMVvBJzX3JqYaooY,662
3
- awscli/alias.py,sha256=Jj2jetpajUMcjqx9tFhHUOKpzLChQygnH2zqDFfmgIM,11315
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=LFTcEElZCNKR3EP9Ovs7DlwUCVoLyaG-yXpf_CpR1lw,21180
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=DCUU4LpcoKNGBagl35P2t4xSuSinKWdPmcNPCXB6AJE,26528
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=Am_eFAIvtH4dMlWdUzMXY0IGEiZyGZ5knXyJBTIs5vM,10885
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=Y6oRMAA7T4cbnbxnsonGKaroiSP51EzAkoMUB9EvIO0,10169
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=XWru9NHF0jNuhrA79xQY03vJPyRpe2Jth9tyXnsGqL8,3883
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=eHUUk93vtbVOR3TjSeoCh-nh5JVSK0fiPxO7wX_Okl0,17155
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=9RC-01u4hrhnxKSWw_Q84zbB1USsiOUo9EHh9b4oLQI,4574
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=S1FQzScLUId9-r-9Z1qeLHN0BIhvlcq96yQsUcxCaXI,12364
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=XHXcFrydXhaNAZBBFpipKztSAZWm-tbF7rej5zHqk6I,3186
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=d1RhgZ2Tx8HTqaRwae-_VOpN8c4gTyjRM0MC0DGzKN8,15561
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=Zk361nn61l1kPIfqzomLquFPbsPIjgnERDYsE280QUs,63307
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=BmzLvjyKHHHownOPs_6rbuDwvxZYugl3fqKT35FUju8,3146
218
- awscli/examples/global_options.rst,sha256=ALL9zUrpeMpP2u0WFc3OHaMrD2l7YdAWt44hm5kcTkw,1728
219
- awscli/examples/global_synopsis.rst,sha256=r3F32RpxgyA9nVhHXygviXojw9XdoG-Jvxngu1UX77Q,286
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.43.14.data/scripts/aws,sha256=r24FExgs0-JjILTQ3XZAqXBYE4SV6UMTtALkLGAj86g,805
6065
- awscli-1.43.14.data/scripts/aws.cmd,sha256=s46DkC6LNgX63CIkzxxbPnFMJ6DRDBkvc88GnWa8Pvg,1432
6066
- awscli-1.43.14.data/scripts/aws_bash_completer,sha256=RRpoEGJRagRzyHZKZZOwpltuVYv2EoiZsdXhmyWPZ54,204
6067
- awscli-1.43.14.data/scripts/aws_completer,sha256=oC9kuMDlWE47dWk_4xjPde2PQvN-M0vND0J4YSLabVQ,1126
6068
- awscli-1.43.14.data/scripts/aws_zsh_completer.sh,sha256=Qm6Z8ejNAMzpJjaT0pzqxbSDT2zxdmzVe5haRA7qLoc,1808
6069
- awscli-1.43.14.dist-info/LICENSE.txt,sha256=o5XhFlwu0OK_BBrijlKCRa7dQAm36UrUB3gCV_cEr8E,549
6070
- awscli-1.43.14.dist-info/METADATA,sha256=zQTHDqQDNIaLXd00UR0_9oYsgrCVCJxjyINdxK2SegY,11200
6071
- awscli-1.43.14.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
6072
- awscli-1.43.14.dist-info/top_level.txt,sha256=vt9wXFr1_nGYK6abhJgt6zY3fULe4JSZedm_5XOM9S0,7
6073
- awscli-1.43.14.dist-info/RECORD,,
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