From 0aebbd52968c6705ccf07e2981d40c25d37e5aeb Mon Sep 17 00:00:00 2001 From: Kentaro Date: Sat, 24 Oct 2020 20:25:38 -0400 Subject: [PATCH 1/2] Update base64.encodestring for Python 3.9 compatibility encodestring() method was removed from base64 in Python 3.9. See the release notes: https://docs.python.org/3.9/whatsnew/3.9.html#removed --- S3/Crypto.py | 2 +- S3/S3.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/S3/Crypto.py b/S3/Crypto.py index 315c98ff3..c320ac4b0 100644 --- a/S3/Crypto.py +++ b/S3/Crypto.py @@ -63,7 +63,7 @@ def sign_string_v2(string_to_sign): and returned signature will be utf-8 encoded "bytes". """ secret_key = Config.Config().secret_key - signature = base64.encodestring(hmac.new(encode_to_s3(secret_key), string_to_sign, sha1).digest()).strip() + signature = base64.encodebytes(hmac.new(encode_to_s3(secret_key), string_to_sign, sha1).digest()).strip() return signature __all__.append("sign_string_v2") diff --git a/S3/S3.py b/S3/S3.py index 24a549230..1616afc46 100644 --- a/S3/S3.py +++ b/S3/S3.py @@ -2054,7 +2054,7 @@ def parse_attrs_header(attrs_header): def compute_content_md5(body): m = md5(encode_to_s3(body)) - base64md5 = base64.encodestring(m.digest()) + base64md5 = base64.encodebytes(m.digest()) base64md5 = decode_from_s3(base64md5) if base64md5[-1] == '\n': base64md5 = base64md5[0:-1] From 44cc1a996658eb6d150973018fece5b6d6e1f5bf Mon Sep 17 00:00:00 2001 From: Kentaro Date: Wed, 28 Oct 2020 10:15:14 -0400 Subject: [PATCH 2/2] Update base64 import to support Python 2 and 3 --- S3/Crypto.py | 9 +++++++-- S3/S3.py | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/S3/Crypto.py b/S3/Crypto.py index c320ac4b0..7f8eee246 100644 --- a/S3/Crypto.py +++ b/S3/Crypto.py @@ -10,7 +10,12 @@ import sys import hmac -import base64 +try: + # Python 2 support + from base64 import encodestring +except ImportError: + # Python 3.9.0+ support + from base64 import encodebytes as encodestring from . import Config from logging import debug @@ -63,7 +68,7 @@ def sign_string_v2(string_to_sign): and returned signature will be utf-8 encoded "bytes". """ secret_key = Config.Config().secret_key - signature = base64.encodebytes(hmac.new(encode_to_s3(secret_key), string_to_sign, sha1).digest()).strip() + signature = encodestring(hmac.new(encode_to_s3(secret_key), string_to_sign, sha1).digest()).strip() return signature __all__.append("sign_string_v2") diff --git a/S3/S3.py b/S3/S3.py index 1616afc46..7fd7b7f22 100644 --- a/S3/S3.py +++ b/S3/S3.py @@ -12,7 +12,6 @@ import os import time import errno -import base64 import mimetypes import io import pprint @@ -25,6 +24,12 @@ from urlparse import urlparse except ImportError: from urllib.parse import urlparse +try: + # Python 2 support + from base64 import encodestring +except ImportError: + # Python 3.9.0+ support + from base64 import encodebytes as encodestring import select @@ -2054,7 +2059,7 @@ def parse_attrs_header(attrs_header): def compute_content_md5(body): m = md5(encode_to_s3(body)) - base64md5 = base64.encodebytes(m.digest()) + base64md5 = encodestring(m.digest()) base64md5 = decode_from_s3(base64md5) if base64md5[-1] == '\n': base64md5 = base64md5[0:-1]