Merge remote-tracking branch 'fedora/f41' into c10s

This commit is contained in:
Major Hayden 2024-08-22 08:16:56 -05:00
commit 90fc8884e9
No known key found for this signature in database
6 changed files with 134 additions and 300 deletions

9
.gitignore vendored
View File

@ -29,3 +29,12 @@
/aws-cli-2.15.2.tar.gz
/aws-cli-2.15.10.tar.gz
/aws-cli-2.15.31.tar.gz
/aws-cli-2.15.30.tar.gz
/aws-cli-2.15.31.tar.gz
/aws-cli-2.16.8.tar.gz
/aws-cli-2.17.0.tar.gz
/aws-cli-2.17.1.tar.gz
/aws-cli-2.17.2.tar.gz
/aws-cli-2.17.6.tar.gz
/aws-cli-2.17.13.tar.gz
/aws-cli-2.17.18.tar.gz

View File

@ -0,0 +1,38 @@
From 4b5762bb17f172d9f9e058df8908651856ff4a69 Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Thu, 13 Jun 2024 10:33:42 -0700
Subject: [PATCH] Bump the ceiling for botocore memory leak tests to 15 MiB
See https://github.com/boto/botocore/issues/3205 for the
background on this. In rebuilding awscli2 for Python 3.13 in
Fedora Rawhide, we found that two of these tests fail because
they now top out around 11MiB of memory usage, rather than
around 1.6MiB. We don't understand why this is yet, but it's not
a memory *leak*, so bumping the ceiling seems appropriate. I'm
sending this upstream so I have a reference for the downstream
package and to raise awareness of the issue, but the correct fix
may be something else.
Signed-off-by: Adam Williamson <awilliam@redhat.com>
---
tests/functional/botocore/leak/test_resource_leaks.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/functional/botocore/leak/test_resource_leaks.py b/tests/functional/botocore/leak/test_resource_leaks.py
index df1c4fe7f..73027725f 100644
--- a/tests/functional/botocore/leak/test_resource_leaks.py
+++ b/tests/functional/botocore/leak/test_resource_leaks.py
@@ -22,8 +22,8 @@ class TestDoesNotLeakMemory(BaseClientDriverTest):
# a substantial amount of time to the total test run time.
INJECT_DUMMY_CREDS = True
# We're making up numbers here, but let's say arbitrarily
- # that the memory can't increase by more than 10MB.
- MAX_GROWTH_BYTES = 10 * 1024 * 1024
+ # that the memory can't increase by more than 15MB.
+ MAX_GROWTH_BYTES = 15 * 1024 * 1024
def test_create_single_client_memory_constant(self):
self.cmd('create_client', 's3')
--
2.45.2

View File

@ -1,3 +1,3 @@
This repository is maintained by packit.
https://packit.dev/
The file was generated using packit 0.88.0.post1.dev4+gc070191b.
The file was generated using packit 0.99.0.post1.dev18+g4850a935.

View File

@ -1,7 +1,7 @@
%global pkgname aws-cli
Name: awscli2
Version: 2.15.31
Version: 2.17.18
Release: %autorelease
Summary: Universal Command Line Environment for AWS, version 2
@ -19,6 +19,10 @@ Patch0: ruamel-yaml-0.17.32.patch
Patch1: python312.patch
# fix incorrect assertions in TestKubeconfigLoader
Patch2: assertions.patch
# Bump ceiling for botocore memory leak tests
# https://github.com/aws/aws-cli/pull/8744
# https://github.com/boto/botocore/issues/3205
Patch3: 0001-Bump-the-ceiling-for-botocore-memory-leak-tests-to-1.patch
BuildArch: noarch
@ -106,9 +110,7 @@ sed -i '/self.driver.start(env=env)/i \ \ \ \ \ \ \ \ env["PYTHONPATH"] = "%{bui
tests/utils/botocore/__init__.py
export TESTS_REMOVE_REPO_ROOT_FROM_PATH=1 TZ=UTC
%if 0%{?rhel}
export OPENSSL_ENABLE_SHA1_SIGNATURES=yes
%endif
%pytest --verbose %{!?rhel:--numprocesses=auto --dist=loadfile --maxprocesses=4} tests/unit tests/functional

View File

@ -1,49 +1,8 @@
diff --git a/awscli/bcdoc/docstringparser.py b/awscli/bcdoc/docstringparser.py
index 868bd5d..3eaf662 100644
--- a/awscli/bcdoc/docstringparser.py
+++ b/awscli/bcdoc/docstringparser.py
@@ -11,9 +11,10 @@
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
from botocore.compat import six
+from html import parser as html_parser
-class DocStringParser(six.moves.html_parser.HTMLParser):
+class DocStringParser(html_parser.HTMLParser):
"""
A simple HTML parser. Focused on converting the subset of HTML
that appears in the documentation strings of the JSON models into
@@ -23,20 +24,20 @@ class DocStringParser(six.moves.html_parser.HTMLParser):
def __init__(self, doc):
self.tree = None
self.doc = doc
- six.moves.html_parser.HTMLParser.__init__(self)
+ html_parser.HTMLParser.__init__(self)
def reset(self):
- six.moves.html_parser.HTMLParser.reset(self)
+ html_parser.HTMLParser.reset(self)
self.tree = HTMLTree(self.doc)
def feed(self, data):
# HTMLParser is an old style class, so the super() method will not work.
- six.moves.html_parser.HTMLParser.feed(self, data)
+ html_parser.HTMLParser.feed(self, data)
self.tree.write()
self.tree = HTMLTree(self.doc)
def close(self):
- six.moves.html_parser.HTMLParser.close(self)
+ html_parser.HTMLParser.close(self)
# Write if there is anything remaining.
self.tree.write()
self.tree = HTMLTree(self.doc)
diff --git a/awscli/botocore/auth.py b/awscli/botocore/auth.py
index e8c83ad..e50be2a 100644
index 0c1bc74a..de33e127 100644
--- a/awscli/botocore/auth.py
+++ b/awscli/botocore/auth.py
@@ -396,7 +396,7 @@ class SigV4Auth(BaseSigner):
@@ -395,7 +395,7 @@ class SigV4Auth(BaseSigner):
def add_auth(self, request):
if self.credentials is None:
raise NoCredentialsError()
@ -52,7 +11,7 @@ index e8c83ad..e50be2a 100644
request.context['timestamp'] = datetime_now.strftime(SIGV4_TIMESTAMP)
# This could be a retry. Make sure the previous
# authorization header is removed first.
@@ -440,7 +440,7 @@ class SigV4Auth(BaseSigner):
@@ -439,7 +439,7 @@ class SigV4Auth(BaseSigner):
if 'Date' in request.headers:
del request.headers['Date']
datetime_timestamp = datetime.datetime.strptime(
@ -61,7 +20,7 @@ index e8c83ad..e50be2a 100644
request.headers['Date'] = formatdate(
int(calendar.timegm(datetime_timestamp.timetuple())))
if 'X-Amz-Date' in request.headers:
@@ -528,7 +528,7 @@ class S3ExpressPostAuth(S3ExpressAuth):
@@ -527,7 +527,7 @@ class S3ExpressPostAuth(S3ExpressAuth):
REQUIRES_IDENTITY_CACHE = True
def add_auth(self, request):
@ -70,7 +29,7 @@ index e8c83ad..e50be2a 100644
request.context['timestamp'] = datetime_now.strftime(SIGV4_TIMESTAMP)
fields = {}
@@ -781,7 +781,7 @@ class S3SigV4PostAuth(SigV4Auth):
@@ -780,7 +780,7 @@ class S3SigV4PostAuth(SigV4Auth):
http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
"""
def add_auth(self, request):
@ -79,46 +38,8 @@ index e8c83ad..e50be2a 100644
request.context['timestamp'] = datetime_now.strftime(SIGV4_TIMESTAMP)
fields = {}
diff --git a/awscli/botocore/compat.py b/awscli/botocore/compat.py
index b189271..de182f4 100644
--- a/awscli/botocore/compat.py
+++ b/awscli/botocore/compat.py
@@ -33,7 +33,7 @@ from urllib3 import exceptions
logger = logging.getLogger(__name__)
-from botocore.vendored.six.moves import http_client
+from http import client as http_client
class HTTPHeaders(http_client.HTTPMessage):
pass
diff --git a/awscli/botocore/configloader.py b/awscli/botocore/configloader.py
index 3d1de2f..d8120c6 100644
--- a/awscli/botocore/configloader.py
+++ b/awscli/botocore/configloader.py
@@ -18,6 +18,7 @@ import sys
import botocore.exceptions
from botocore.compat import six
+import configparser
def multi_file_load_config(*filenames):
@@ -143,10 +144,10 @@ def raw_config_parse(config_filename, parse_subsections=True):
path = os.path.expanduser(path)
if not os.path.isfile(path):
raise botocore.exceptions.ConfigNotFound(path=_unicode_path(path))
- cp = six.moves.configparser.RawConfigParser()
+ cp = configparser.RawConfigParser()
try:
cp.read([path])
- except (six.moves.configparser.Error, UnicodeDecodeError):
+ except (configparser.Error, UnicodeDecodeError):
raise botocore.exceptions.ConfigParseError(
path=_unicode_path(path))
else:
diff --git a/awscli/botocore/crt/auth.py b/awscli/botocore/crt/auth.py
index 534a7f8..5046b35 100644
index 534a7f8d..5046b35b 100644
--- a/awscli/botocore/crt/auth.py
+++ b/awscli/botocore/crt/auth.py
@@ -55,10 +55,7 @@ class CrtSigV4Auth(BaseSigner):
@ -145,94 +66,8 @@ index 534a7f8..5046b35 100644
# Use existing 'X-Amz-Content-SHA256' header if able
existing_sha256 = self._get_existing_sha256(request)
diff --git a/awscli/botocore/docs/bcdoc/docstringparser.py b/awscli/botocore/docs/bcdoc/docstringparser.py
index 868bd5d..3eaf662 100644
--- a/awscli/botocore/docs/bcdoc/docstringparser.py
+++ b/awscli/botocore/docs/bcdoc/docstringparser.py
@@ -11,9 +11,10 @@
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
from botocore.compat import six
+from html import parser as html_parser
-class DocStringParser(six.moves.html_parser.HTMLParser):
+class DocStringParser(html_parser.HTMLParser):
"""
A simple HTML parser. Focused on converting the subset of HTML
that appears in the documentation strings of the JSON models into
@@ -23,20 +24,20 @@ class DocStringParser(six.moves.html_parser.HTMLParser):
def __init__(self, doc):
self.tree = None
self.doc = doc
- six.moves.html_parser.HTMLParser.__init__(self)
+ html_parser.HTMLParser.__init__(self)
def reset(self):
- six.moves.html_parser.HTMLParser.reset(self)
+ html_parser.HTMLParser.reset(self)
self.tree = HTMLTree(self.doc)
def feed(self, data):
# HTMLParser is an old style class, so the super() method will not work.
- six.moves.html_parser.HTMLParser.feed(self, data)
+ html_parser.HTMLParser.feed(self, data)
self.tree.write()
self.tree = HTMLTree(self.doc)
def close(self):
- six.moves.html_parser.HTMLParser.close(self)
+ html_parser.HTMLParser.close(self)
# Write if there is anything remaining.
self.tree.write()
self.tree = HTMLTree(self.doc)
diff --git a/awscli/botocore/httpsession.py b/awscli/botocore/httpsession.py
index 29b2103..d51dfdd 100644
--- a/awscli/botocore/httpsession.py
+++ b/awscli/botocore/httpsession.py
@@ -59,7 +59,7 @@ from botocore.exceptions import (
ReadTimeoutError,
SSLError,
)
-from botocore.vendored.six.moves.urllib_parse import unquote
+from urllib.parse import unquote
filter_ssl_warnings()
logger = logging.getLogger(__name__)
diff --git a/awscli/botocore/parsers.py b/awscli/botocore/parsers.py
index ffca974..367c867 100644
--- a/awscli/botocore/parsers.py
+++ b/awscli/botocore/parsers.py
@@ -119,7 +119,8 @@ import json
import logging
import re
-from botocore.compat import ETree, XMLParseError, six
+from botocore.compat import ETree, XMLParseError
+from http import client as http_client
from botocore.eventstream import EventStream, NoInitialResponseError
from botocore.utils import (
is_json_value_header,
@@ -300,7 +301,7 @@ class ResponseParser(object):
"service, unable to populate error code and message.")
return {
'Error': {'Code': str(response['status_code']),
- 'Message': six.moves.http_client.responses.get(
+ 'Message': http_client.responses.get(
response['status_code'], '')},
'ResponseMetadata': {},
}
@@ -1035,7 +1036,7 @@ class RestXMLParser(BaseRestParser, BaseXMLResponseParser):
return {
'Error': {
'Code': str(response['status_code']),
- 'Message': six.moves.http_client.responses.get(
+ 'Message': http_client.responses.get(
response['status_code'], ''),
},
'ResponseMetadata': {
diff --git a/awscli/botocore/signers.py b/awscli/botocore/signers.py
index 57df023..7ff87e4 100644
index 604f6553..6c55277e 100644
--- a/awscli/botocore/signers.py
+++ b/awscli/botocore/signers.py
@@ -549,7 +549,7 @@ class S3PostPresigner(object):
@ -245,19 +80,10 @@ index 57df023..7ff87e4 100644
policy['expiration'] = expire_date.strftime(botocore.auth.ISO8601)
diff --git a/awscli/botocore/utils.py b/awscli/botocore/utils.py
index a408d9d..f4d7ece 100644
index 89bcc2aa..8d3688c5 100644
--- a/awscli/botocore/utils.py
+++ b/awscli/botocore/utils.py
@@ -72,7 +72,7 @@ from botocore.exceptions import (
UnsupportedS3ControlArnError,
UnsupportedS3ControlConfigurationError,
)
-from botocore.vendored.six.moves.urllib.request import getproxies, proxy_bypass
+from urllib.request import getproxies, proxy_bypass
from dateutil.tz import tzutc
from urllib3.exceptions import LocationParseError
@@ -583,13 +583,13 @@ class InstanceMetadataFetcher(IMDSFetcher):
@@ -582,13 +582,13 @@ class InstanceMetadataFetcher(IMDSFetcher):
return
try:
expiration = datetime.datetime.strptime(
@ -274,10 +100,10 @@ index a408d9d..f4d7ece 100644
extension_time = expiration - refresh_offset
if current_time >= extension_time:
diff --git a/awscli/compat.py b/awscli/compat.py
index 4ea633b..1031356 100644
index b6ae8981..a41c4c6b 100644
--- a/awscli/compat.py
+++ b/awscli/compat.py
@@ -25,6 +25,8 @@ from functools import partial
@@ -29,6 +29,8 @@ from functools import partial
import urllib.parse as urlparse
from urllib.error import URLError
@ -286,22 +112,8 @@ index 4ea633b..1031356 100644
from botocore.compat import six
from botocore.compat import OrderedDict
@@ -33,11 +35,10 @@ from botocore.compat import OrderedDict
# This may get large.
advance_iterator = six.advance_iterator
PY3 = six.PY3
-queue = six.moves.queue
-shlex_quote = six.moves.shlex_quote
+shlex_quote = shlex.quote
StringIO = six.StringIO
BytesIO = six.BytesIO
-urlopen = six.moves.urllib.request.urlopen
+urlopen = urllib.request.urlopen
binary_type = six.binary_type
# Most, but not all, python installations will have zlib. This is required to
diff --git a/awscli/customizations/cloudformation/deployer.py b/awscli/customizations/cloudformation/deployer.py
index 3733c55..8236d33 100644
index 3733c55e..8236d33c 100644
--- a/awscli/customizations/cloudformation/deployer.py
+++ b/awscli/customizations/cloudformation/deployer.py
@@ -20,7 +20,7 @@ import collections
@ -323,7 +135,7 @@ index 3733c55..8236d33 100644
# Each changeset will get a unique name based on time
diff --git a/awscli/customizations/cloudtrail/validation.py b/awscli/customizations/cloudtrail/validation.py
index 78e2540..ad13507 100644
index 78e25408..ad135077 100644
--- a/awscli/customizations/cloudtrail/validation.py
+++ b/awscli/customizations/cloudtrail/validation.py
@@ -19,7 +19,7 @@ import re
@ -354,7 +166,7 @@ index 78e2540..ad13507 100644
raise ParamValidationError(
'Invalid time range specified: start-time must '
diff --git a/awscli/customizations/codecommit.py b/awscli/customizations/codecommit.py
index 6b30e83..7859fb8 100644
index 6b30e834..7859fb89 100644
--- a/awscli/customizations/codecommit.py
+++ b/awscli/customizations/codecommit.py
@@ -150,7 +150,7 @@ class CodeCommitGetCommand(BasicCommand):
@ -367,7 +179,7 @@ index 6b30e83..7859fb8 100644
split = urlsplit(request.url)
# we don't want to include the port number in the signature
diff --git a/awscli/customizations/codedeploy/push.py b/awscli/customizations/codedeploy/push.py
index 4c08664..6d97c8c 100644
index 4e0fbcff..9f71f7c2 100644
--- a/awscli/customizations/codedeploy/push.py
+++ b/awscli/customizations/codedeploy/push.py
@@ -16,7 +16,7 @@ import sys
@ -379,7 +191,7 @@ index 4c08664..6d97c8c 100644
from botocore.exceptions import ClientError
@@ -133,7 +133,7 @@ class Push(BasicCommand):
@@ -132,7 +132,7 @@ class Push(BasicCommand):
if not parsed_args.description:
parsed_args.description = (
'Uploaded by AWS CLI {0} UTC'.format(
@ -388,21 +200,8 @@ index 4c08664..6d97c8c 100644
)
)
diff --git a/awscli/customizations/configure/__init__.py b/awscli/customizations/configure/__init__.py
index ab06305..55f11a9 100644
--- a/awscli/customizations/configure/__init__.py
+++ b/awscli/customizations/configure/__init__.py
@@ -11,7 +11,7 @@
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
import string
-from botocore.vendored.six.moves import shlex_quote
+from shlex import quote as shlex_quote
NOT_SET = '<not set>'
PREDEFINED_SECTION_NAMES = ('plugins')
diff --git a/awscli/customizations/datapipeline/__init__.py b/awscli/customizations/datapipeline/__init__.py
index c47ca94..0c12c39 100644
index c47ca94f..0c12c394 100644
--- a/awscli/customizations/datapipeline/__init__.py
+++ b/awscli/customizations/datapipeline/__init__.py
@@ -12,7 +12,7 @@
@ -424,10 +223,10 @@ index c47ca94..0c12c39 100644
def build_query(self, parsed_args):
diff --git a/awscli/customizations/ec2/bundleinstance.py b/awscli/customizations/ec2/bundleinstance.py
index 96d9ece..ad4dca0 100644
index cc6802d6..56c1efa6 100644
--- a/awscli/customizations/ec2/bundleinstance.py
+++ b/awscli/customizations/ec2/bundleinstance.py
@@ -120,7 +120,7 @@ def _generate_policy(params):
@@ -118,7 +118,7 @@ def _generate_policy(params):
# Called if there is no policy supplied by the user.
# Creates a policy that provides access for 24 hours.
delta = datetime.timedelta(hours=24)
@ -437,7 +236,7 @@ index 96d9ece..ad4dca0 100644
policy = POLICY.format(expires=expires_iso,
bucket=params['Bucket'],
diff --git a/awscli/customizations/eks/get_token.py b/awscli/customizations/eks/get_token.py
index c85b86d..9812be4 100644
index c85b86dd..9812be4f 100644
--- a/awscli/customizations/eks/get_token.py
+++ b/awscli/customizations/eks/get_token.py
@@ -16,7 +16,7 @@ import json
@ -459,7 +258,7 @@ index c85b86d..9812be4 100644
)
return token_expiration.strftime('%Y-%m-%dT%H:%M:%SZ')
diff --git a/awscli/customizations/logs/tail.py b/awscli/customizations/logs/tail.py
index cb31510..623e027 100644
index cb315100..623e0272 100644
--- a/awscli/customizations/logs/tail.py
+++ b/awscli/customizations/logs/tail.py
@@ -11,7 +11,8 @@
@ -482,7 +281,7 @@ index cb31510..623e027 100644
def to_epoch_millis(self, timestamp):
re_match = self._RELATIVE_TIMESTAMP_REGEX.match(timestamp)
diff --git a/awscli/customizations/opsworks.py b/awscli/customizations/opsworks.py
index a2a0c1e..ff73132 100644
index e91d4789..9f848c64 100644
--- a/awscli/customizations/opsworks.py
+++ b/awscli/customizations/opsworks.py
@@ -507,7 +507,7 @@ class OpsWorksRegister(BasicCommand):
@ -495,11 +294,11 @@ index a2a0c1e..ff73132 100644
"DateLessThan": {
"aws:CurrentTime":
diff --git a/tests/functional/botocore/test_credentials.py b/tests/functional/botocore/test_credentials.py
index 843be90..0349eb4 100644
index 18bd248d..8af69de4 100644
--- a/tests/functional/botocore/test_credentials.py
+++ b/tests/functional/botocore/test_credentials.py
@@ -19,7 +19,7 @@ import time
import mock
@@ -18,7 +18,7 @@ import math
import time
import tempfile
import shutil
-from datetime import datetime, timedelta
@ -507,7 +306,7 @@ index 843be90..0349eb4 100644
import sys
import pytest
@@ -47,8 +47,8 @@ from botocore.stub import Stubber
@@ -46,8 +46,8 @@ from botocore.stub import Stubber
from botocore.tokens import SSOTokenProvider
from botocore.utils import datetime2timestamp
@ -519,10 +318,10 @@ index 843be90..0349eb4 100644
class TestCredentialRefreshRaces(unittest.TestCase):
diff --git a/tests/functional/botocore/test_ec2.py b/tests/functional/botocore/test_ec2.py
index 795094e..3ff22c4 100644
index a5aec4aa..475134cc 100644
--- a/tests/functional/botocore/test_ec2.py
+++ b/tests/functional/botocore/test_ec2.py
@@ -86,13 +86,13 @@ class TestCopySnapshotCustomization(BaseSessionTest):
@@ -85,13 +85,13 @@ class TestCopySnapshotCustomization(BaseSessionTest):
'<snapshotId>%s</snapshotId>\n'
'</CopySnapshotResponse>\n'
)
@ -539,19 +338,19 @@ index 795094e..3ff22c4 100644
def tearDown(self):
super(TestCopySnapshotCustomization, self).tearDown()
diff --git a/tests/functional/botocore/test_lex.py b/tests/functional/botocore/test_lex.py
index 7e7f619..dbdf329 100644
index 659296fd..614691e8 100644
--- a/tests/functional/botocore/test_lex.py
+++ b/tests/functional/botocore/test_lex.py
@@ -11,7 +11,7 @@
@@ -10,7 +10,7 @@
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
import mock
-from datetime import datetime
+from datetime import datetime, timezone
from tests import BaseSessionTest, ClientHTTPStubber
from tests import mock, BaseSessionTest, ClientHTTPStubber
@@ -32,10 +32,10 @@ class TestLex(BaseSessionTest):
@@ -31,10 +31,10 @@ class TestLex(BaseSessionTest):
'inputStream': b''
}
@ -565,7 +364,7 @@ index 7e7f619..dbdf329 100644
with self.http_stubber:
self.client.post_content(**params)
diff --git a/tests/functional/botocore/test_s3express.py b/tests/functional/botocore/test_s3express.py
index 390721e..ebb89b0 100644
index 390721ee..ebb89b0b 100644
--- a/tests/functional/botocore/test_s3express.py
+++ b/tests/functional/botocore/test_s3express.py
@@ -108,7 +108,6 @@ class TestS3ExpressAuth:
@ -626,7 +425,7 @@ index 390721e..ebb89b0 100644
with ClientHTTPStubber(default_s3_client) as stubber:
diff --git a/tests/functional/botocore/test_sts.py b/tests/functional/botocore/test_sts.py
index cdc212a..a279881 100644
index beb48030..e6978795 100644
--- a/tests/functional/botocore/test_sts.py
+++ b/tests/functional/botocore/test_sts.py
@@ -10,7 +10,7 @@
@ -637,8 +436,8 @@ index cdc212a..a279881 100644
+from datetime import datetime, timezone
import re
import mock
@@ -38,9 +38,9 @@ class TestSTSPresignedUrl(BaseSessionTest):
from tests import BaseSessionTest
@@ -36,9 +36,9 @@ class TestSTSPresignedUrl(BaseSessionTest):
self.stubber.activate()
def test_presigned_url_contains_no_content_type(self):
@ -651,10 +450,10 @@ index cdc212a..a279881 100644
# There should be no 'content-type' in x-amz-signedheaders
diff --git a/tests/functional/ec2/test_bundle_instance.py b/tests/functional/ec2/test_bundle_instance.py
index 5bc3204..67015f0 100644
index 1c485d88..d5037fe0 100644
--- a/tests/functional/ec2/test_bundle_instance.py
+++ b/tests/functional/ec2/test_bundle_instance.py
@@ -34,7 +34,7 @@ class TestBundleInstance(BaseAWSCommandParamsTest):
@@ -31,7 +31,7 @@ class TestBundleInstance(BaseAWSCommandParamsTest):
def setUp(self):
super(TestBundleInstance, self).setUp()
@ -663,7 +462,7 @@ index 5bc3204..67015f0 100644
# returns the same datetime object. This is because this value
# is embedded into the policy file that is generated and we
# don't what the policy or its signature to change each time
@@ -44,7 +44,7 @@ class TestBundleInstance(BaseAWSCommandParamsTest):
@@ -41,7 +41,7 @@ class TestBundleInstance(BaseAWSCommandParamsTest):
mock.Mock(wraps=datetime.datetime)
)
mocked_datetime = self.datetime_patcher.start()
@ -673,7 +472,7 @@ index 5bc3204..67015f0 100644
def tearDown(self):
super(TestBundleInstance, self).tearDown()
diff --git a/tests/functional/ec2instanceconnect/test_opentunnel.py b/tests/functional/ec2instanceconnect/test_opentunnel.py
index 83f824d..ddefc47 100644
index 83f824d2..ddefc47f 100644
--- a/tests/functional/ec2instanceconnect/test_opentunnel.py
+++ b/tests/functional/ec2instanceconnect/test_opentunnel.py
@@ -310,10 +310,10 @@ def request_params_for_describe_eice():
@ -699,7 +498,7 @@ index 83f824d..ddefc47 100644
cli_runner.env["AWS_USE_FIPS_ENDPOINT"] = "false"
cmdline = [
diff --git a/tests/functional/eks/test_get_token.py b/tests/functional/eks/test_get_token.py
index 89801f9..cdf51f7 100644
index 89801f9b..cdf51f7b 100644
--- a/tests/functional/eks/test_get_token.py
+++ b/tests/functional/eks/test_get_token.py
@@ -11,7 +11,7 @@
@ -748,7 +547,7 @@ index 89801f9..cdf51f7 100644
cmd += ' --output table'
stdout, _, _ = self.run_cmd(cmd)
diff --git a/tests/functional/logs/test_tail.py b/tests/functional/logs/test_tail.py
index 6049a7f..5707da9 100644
index 6049a7f8..5707da93 100644
--- a/tests/functional/logs/test_tail.py
+++ b/tests/functional/logs/test_tail.py
@@ -152,7 +152,7 @@ class TestTailCommand(BaseAWSCommandParamsTest):
@ -770,10 +569,10 @@ index 6049a7f..5707da9 100644
with mock.patch('awscli.customizations.logs.tail.datetime',
new=datetime_mock):
diff --git a/tests/functional/rds/test_generate_db_auth_token.py b/tests/functional/rds/test_generate_db_auth_token.py
index 795b939..4562b92 100644
index 79634ed0..1008ba39 100644
--- a/tests/functional/rds/test_generate_db_auth_token.py
+++ b/tests/functional/rds/test_generate_db_auth_token.py
@@ -53,7 +53,7 @@ class TestGenerateDBAuthToken(BaseAWSCommandParamsTest):
@@ -51,7 +51,7 @@ class TestGenerateDBAuthToken(BaseAWSCommandParamsTest):
clock = datetime.datetime(2016, 11, 7, 17, 39, 33, tzinfo=tzutc())
with mock.patch('datetime.datetime') as dt:
@ -783,7 +582,7 @@ index 795b939..4562b92 100644
expected = (
diff --git a/tests/functional/s3/test_presign_command.py b/tests/functional/s3/test_presign_command.py
index 2db338a..03741d1 100644
index 2db338a0..03741d19 100644
--- a/tests/functional/s3/test_presign_command.py
+++ b/tests/functional/s3/test_presign_command.py
@@ -18,13 +18,13 @@ from awscli.testutils import BaseAWSCommandParamsTest, mock, temporary_file
@ -811,22 +610,8 @@ index 2db338a..03741d1 100644
stdout = self.assert_params_for_cmd(cmdline, None)[0].strip()
return stdout
diff --git a/tests/integration/botocore/test_client_http.py b/tests/integration/botocore/test_client_http.py
index d6b0902..4e66fdf 100644
--- a/tests/integration/botocore/test_client_http.py
+++ b/tests/integration/botocore/test_client_http.py
@@ -8,7 +8,8 @@ from contextlib import contextmanager
import botocore.session
from botocore.config import Config
-from botocore.vendored.six.moves import BaseHTTPServer, socketserver
+from http import server as BaseHTTPServer
+import socketserver
from botocore.exceptions import (
ConnectTimeoutError, ReadTimeoutError, EndpointConnectionError,
ConnectionClosedError, ClientError, ProxyConnectionError
diff --git a/tests/integration/customizations/test_codecommit.py b/tests/integration/customizations/test_codecommit.py
index 751e051..fc4d2c1 100644
index 7ffbed65..25c78faf 100644
--- a/tests/integration/customizations/test_codecommit.py
+++ b/tests/integration/customizations/test_codecommit.py
@@ -14,7 +14,7 @@
@ -836,7 +621,7 @@ index 751e051..fc4d2c1 100644
-from datetime import datetime
+from datetime import datetime, timezone
from six import StringIO
from awscli.compat import StringIO
from botocore.session import Session
@@ -59,7 +59,7 @@ class TestCodeCommitCredentialHelper(unittest.TestCase):
@mock.patch('sys.stdout', new_callable=StringIOWithFileNo)
@ -866,10 +651,10 @@ index 751e051..fc4d2c1 100644
entry_point = AWSCLIEntryPoint(driver)
rc = entry_point.main('codecommit credential-helper get'.split())
diff --git a/tests/unit/botocore/auth/test_signers.py b/tests/unit/botocore/auth/test_signers.py
index 73d3b12..25ca21f 100644
index 19d559ac..e7db8d8b 100644
--- a/tests/unit/botocore/auth/test_signers.py
+++ b/tests/unit/botocore/auth/test_signers.py
@@ -28,10 +28,10 @@ from botocore.awsrequest import AWSRequest
@@ -27,10 +27,10 @@ from botocore.awsrequest import AWSRequest
class BaseTestWithFixedDate(unittest.TestCase):
def setUp(self):
@ -882,7 +667,7 @@ index 73d3b12..25ca21f 100644
self.datetime_mock.strptime.return_value = self.fixed_date
def tearDown(self):
@@ -358,9 +358,9 @@ class TestSigV4(unittest.TestCase):
@@ -357,9 +357,9 @@ class TestSigV4(unittest.TestCase):
with mock.patch.object(
botocore.auth.datetime, 'datetime',
mock.Mock(wraps=datetime.datetime)) as mock_datetime:
@ -894,7 +679,7 @@ index 73d3b12..25ca21f 100644
# Go through the add_auth process once. This will attach
# a timestamp to the request at the beginning of auth.
auth.add_auth(request)
@@ -368,8 +368,8 @@ class TestSigV4(unittest.TestCase):
@@ -367,8 +367,8 @@ class TestSigV4(unittest.TestCase):
# Ensure the date is in the Authorization header
self.assertIn('20140101', request.headers['Authorization'])
# Now suppose the utc time becomes the next day all of a sudden
@ -905,7 +690,7 @@ index 73d3b12..25ca21f 100644
# Smaller methods like the canonical request and string_to_sign
# should have the timestamp attached to the request in their
# body and not what the time is now mocked as. This is to ensure
@@ -535,8 +535,8 @@ class TestSigV4Presign(BasePresignTest):
@@ -534,8 +534,8 @@ class TestSigV4Presign(BasePresignTest):
mock.Mock(wraps=datetime.datetime)
)
mocked_datetime = self.datetime_patcher.start()
@ -916,7 +701,7 @@ index 73d3b12..25ca21f 100644
def tearDown(self):
self.datetime_patcher.stop()
@@ -730,8 +730,8 @@ class TestS3SigV4Post(BaseS3PresignPostTest):
@@ -729,8 +729,8 @@ class TestS3SigV4Post(BaseS3PresignPostTest):
mock.Mock(wraps=datetime.datetime)
)
mocked_datetime = self.datetime_patcher.start()
@ -928,10 +713,10 @@ index 73d3b12..25ca21f 100644
def tearDown(self):
self.datetime_patcher.stop()
diff --git a/tests/unit/botocore/test_client.py b/tests/unit/botocore/test_client.py
index f28b959..1b3d56b 100644
index 464cc354..2455fc5f 100644
--- a/tests/unit/botocore/test_client.py
+++ b/tests/unit/botocore/test_client.py
@@ -960,7 +960,7 @@ class TestAutoGeneratedClient(unittest.TestCase):
@@ -969,7 +969,7 @@ class TestAutoGeneratedClient(unittest.TestCase):
lines = [
(' Creates an iterator that will paginate through responses '
'from :py:meth:`MyService.Client.test_operation`.'),
@ -940,7 +725,7 @@ index f28b959..1b3d56b 100644
' ::',
' response_iterator = paginator.paginate(',
" Foo='string',",
@@ -976,17 +976,17 @@ class TestAutoGeneratedClient(unittest.TestCase):
@@ -985,17 +985,17 @@ class TestAutoGeneratedClient(unittest.TestCase):
' :type Bar: string',
' :param Bar: Documents Bar',
' :type PaginationConfig: dict',
@ -963,7 +748,7 @@ index f28b959..1b3d56b 100644
'the ``NextToken`` from a previous response.'),
' :returns: None',
diff --git a/tests/unit/botocore/test_credentials.py b/tests/unit/botocore/test_credentials.py
index c59f278..c50f593 100644
index b9931216..7fdcf4ba 100644
--- a/tests/unit/botocore/test_credentials.py
+++ b/tests/unit/botocore/test_credentials.py
@@ -11,7 +11,7 @@
@ -973,9 +758,9 @@ index c59f278..c50f593 100644
-from datetime import datetime, timedelta
+from datetime import datetime, timedelta, timezone
import subprocess
import mock
import os
@@ -111,7 +111,7 @@ class TestRefreshableCredentials(TestCredentials):
import tempfile
@@ -110,7 +110,7 @@ class TestRefreshableCredentials(TestCredentials):
def test_refresh_needed(self):
# The expiry time was set for 30 minutes ago, so if we
@ -984,7 +769,7 @@ index c59f278..c50f593 100644
# a refresh.
self.mock_time.return_value = datetime.now(tzlocal())
self.assertTrue(self.creds.refresh_needed())
@@ -291,8 +291,8 @@ class TestAssumeRoleCredentialFetcher(BaseEnvVar):
@@ -290,8 +290,8 @@ class TestAssumeRoleCredentialFetcher(BaseEnvVar):
self.assertEqual(response, expected_response)
def test_retrieves_from_cache(self):
@ -995,7 +780,7 @@ index c59f278..c50f593 100644
cache_key = (
'793d6e2f27667ab2da104824407e486bfec24a47'
)
@@ -703,8 +703,8 @@ class TestAssumeRoleWithWebIdentityCredentialFetcher(BaseEnvVar):
@@ -702,8 +702,8 @@ class TestAssumeRoleWithWebIdentityCredentialFetcher(BaseEnvVar):
self.assertEqual(response, expected_response)
def test_retrieves_from_cache(self):
@ -1006,7 +791,7 @@ index c59f278..c50f593 100644
cache_key = (
'793d6e2f27667ab2da104824407e486bfec24a47'
)
@@ -823,8 +823,8 @@ class TestAssumeRoleWithWebIdentityCredentialProvider(unittest.TestCase):
@@ -822,8 +822,8 @@ class TestAssumeRoleWithWebIdentityCredentialProvider(unittest.TestCase):
mock_loader_cls.assert_called_with('/some/path/token.jwt')
def test_assume_role_retrieves_from_cache(self):
@ -1017,7 +802,7 @@ index c59f278..c50f593 100644
cache_key = (
'c29461feeacfbed43017d20612606ff76abc073d'
@@ -1961,8 +1961,8 @@ class TestAssumeRoleCredentialProvider(unittest.TestCase):
@@ -1960,8 +1960,8 @@ class TestAssumeRoleCredentialProvider(unittest.TestCase):
self.assertEqual(expiry_time, '2016-11-06T01:30:00UTC')
def test_assume_role_retrieves_from_cache(self):
@ -1028,7 +813,7 @@ index c59f278..c50f593 100644
self.fake_config['profiles']['development']['role_arn'] = 'myrole'
cache_key = (
@@ -1989,8 +1989,8 @@ class TestAssumeRoleCredentialProvider(unittest.TestCase):
@@ -1988,8 +1988,8 @@ class TestAssumeRoleCredentialProvider(unittest.TestCase):
self.assertEqual(creds.token, 'baz-cached')
def test_chain_prefers_cache(self):
@ -1040,10 +825,10 @@ index c59f278..c50f593 100644
# The profile we will be using has a cache entry, but the profile it
# is sourcing from does not. This should result in the cached
diff --git a/tests/unit/botocore/test_signers.py b/tests/unit/botocore/test_signers.py
index e06e0c1..507e2ea 100644
index a38d1b59..b0840d54 100644
--- a/tests/unit/botocore/test_signers.py
+++ b/tests/unit/botocore/test_signers.py
@@ -609,9 +609,9 @@ class TestS3PostPresigner(BaseSignerTest):
@@ -607,9 +607,9 @@ class TestS3PostPresigner(BaseSignerTest):
self.datetime_patch = mock.patch('botocore.signers.datetime')
self.datetime_mock = self.datetime_patch.start()
@ -1055,7 +840,7 @@ index e06e0c1..507e2ea 100644
self.datetime_mock.timedelta.return_value = self.fixed_delta
def tearDown(self):
@@ -979,7 +979,7 @@ class TestGenerateDBAuthToken(BaseSignerTest):
@@ -1004,7 +1004,7 @@ class TestGenerateDBAuthToken(BaseSignerTest):
clock = datetime.datetime(2016, 11, 7, 17, 39, 33, tzinfo=tzutc())
with mock.patch('datetime.datetime') as dt:
@ -1065,7 +850,7 @@ index e06e0c1..507e2ea 100644
self.client, hostname, port, username)
diff --git a/tests/unit/botocore/test_utils.py b/tests/unit/botocore/test_utils.py
index 1f27e25..8116070 100644
index b4699c6c..2d128bf1 100644
--- a/tests/unit/botocore/test_utils.py
+++ b/tests/unit/botocore/test_utils.py
@@ -98,7 +98,7 @@ from botocore.stub import Stubber
@ -1077,7 +862,7 @@ index 1f27e25..8116070 100644
DT_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
@@ -1004,7 +1004,7 @@ class TestSwitchToChunkedEncodingForNonSeekableObjects(unittest.TestCase):
@@ -1052,7 +1052,7 @@ class TestSwitchToChunkedEncodingForNonSeekableObjects(unittest.TestCase):
def test_switch_to_chunked_encodeing_for_stream_like_object(self):
request = AWSRequest(
method='POST', headers={},
@ -1086,7 +871,7 @@ index 1f27e25..8116070 100644
url='https://foo.amazonaws.com/bucket/key.txt'
)
prepared_request = request.prepare()
@@ -2819,7 +2819,7 @@ class TestInstanceMetadataFetcher(unittest.TestCase):
@@ -2867,7 +2867,7 @@ class TestInstanceMetadataFetcher(unittest.TestCase):
self, dt=None, offset=None, offset_func=operator.add
):
if dt is None:
@ -1096,10 +881,10 @@ index 1f27e25..8116070 100644
dt = offset_func(dt, offset)
diff --git a/tests/unit/botocore/test_waiters.py b/tests/unit/botocore/test_waiters.py
index 27fbe1f..b79e173 100644
index c5876f5b..ea393ae9 100644
--- a/tests/unit/botocore/test_waiters.py
+++ b/tests/unit/botocore/test_waiters.py
@@ -648,7 +648,7 @@ class TestCreateWaiter(unittest.TestCase):
@@ -646,7 +646,7 @@ class TestCreateWaiter(unittest.TestCase):
(' Polls :py:meth:`MyService.Client.foo` every 1 '
'seconds until a successful state is reached. An error '
'is returned after 1 failed checks.'),
@ -1109,10 +894,10 @@ index 27fbe1f..b79e173 100644
' waiter.wait(',
" bar='string'",
diff --git a/tests/unit/customizations/eks/test_get_token.py b/tests/unit/customizations/eks/test_get_token.py
index 17c07b0..0d1b7fc 100644
index 9575aa0d..2664e1fe 100644
--- a/tests/unit/customizations/eks/test_get_token.py
+++ b/tests/unit/customizations/eks/test_get_token.py
@@ -49,6 +49,6 @@ class TestGetTokenCommand(BaseTokenTest):
@@ -46,6 +46,6 @@ class TestGetTokenCommand(BaseTokenTest):
cmd = GetTokenCommand(self._session)
timestamp = cmd.get_expiration_time()
try:
@ -1121,10 +906,10 @@ index 17c07b0..0d1b7fc 100644
except ValueError:
raise ValueError("Incorrect data format, should be %Y-%m-%dT%H:%M:%SZ")
diff --git a/tests/unit/customizations/test_opsworks.py b/tests/unit/customizations/test_opsworks.py
index 1471ba9..f6816b9 100644
index d5a6eba3..bad37a90 100644
--- a/tests/unit/customizations/test_opsworks.py
+++ b/tests/unit/customizations/test_opsworks.py
@@ -34,8 +34,8 @@ class TestOpsWorksBase(unittest.TestCase):
@@ -33,8 +33,8 @@ class TestOpsWorksBase(unittest.TestCase):
mock.Mock(wraps=datetime.datetime)
)
mocked_datetime = self.datetime_patcher.start()
@ -1136,10 +921,10 @@ index 1471ba9..f6816b9 100644
def tearDown(self):
self.datetime_patcher.stop()
diff --git a/tests/utils/botocore/__init__.py b/tests/utils/botocore/__init__.py
index 9b8f205..abedac8 100644
index 106736f3..c76288b5 100644
--- a/tests/utils/botocore/__init__.py
+++ b/tests/utils/botocore/__init__.py
@@ -560,12 +560,12 @@ class FreezeTime(contextlib.ContextDecorator):
@@ -559,12 +559,12 @@ class FreezeTime(contextlib.ContextDecorator):
:param module: reference to imported module to patch (e.g. botocore.auth.datetime)
:type date: datetime.datetime
@ -1154,7 +939,7 @@ index 9b8f205..abedac8 100644
self.date = date
self.datetime_patcher = mock.patch.object(
module, 'datetime',
@@ -574,7 +574,7 @@ class FreezeTime(contextlib.ContextDecorator):
@@ -573,7 +573,7 @@ class FreezeTime(contextlib.ContextDecorator):
def __enter__(self, *args, **kwargs):
mock = self.datetime_patcher.start()

View File

@ -1 +1 @@
SHA512 (aws-cli-2.15.31.tar.gz) = 3600409edf0218254f8dfc4346cd0e1df3af2d4047fca2e021f655a48344ec3f058a48258d830b150ed92ede98e723d164a200fcbd519fd8a1002bc6d0c0294d
SHA512 (aws-cli-2.17.18.tar.gz) = 33fd535deefdd214c1b92f4941a83225969b33230dcfa70fea2114be06a92161a97e641fe8bb43bb0f57249ab17593a197b678a3d1dd7d68d244fd8dd64fbb3c