From 05f989399cee1218f37c022bd0f4ebf7bbb947a8 Mon Sep 17 00:00:00 2001 From: mattsb42-aws Date: Wed, 29 Aug 2018 11:11:40 -0700 Subject: [PATCH 1/3] add tests to verify stream handler readable() behaviors --- .../test_f_aws_encryption_sdk_client.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/functional/test_f_aws_encryption_sdk_client.py b/test/functional/test_f_aws_encryption_sdk_client.py index a91de22f8..a6e331a4f 100644 --- a/test/functional/test_f_aws_encryption_sdk_client.py +++ b/test/functional/test_f_aws_encryption_sdk_client.py @@ -574,3 +574,24 @@ def test_decrypt_oneshot_no_seek_input(): ciphertext_no_seek = NoSeekBytesIO(ciphertext) decrypted, _header = aws_encryption_sdk.decrypt(source=ciphertext_no_seek, key_provider=key_provider) assert decrypted == VALUES["plaintext_128"] + + +def test_stream_encryptor_readable(): + """Verify that open StreamEncryptor instances report as readable.""" + key_provider = fake_kms_key_provider() + plaintext = io.BytesIO(VALUES["plaintext_128"]) + with aws_encryption_sdk.StreamEncryptor(source=plaintext, key_provider=key_provider) as handler: + assert handler.readable() + handler.read() + assert not handler.readable() + + +def test_stream_decryptor_readable(): + """Verify that open StreamEncryptor instances report as readable.""" + key_provider = fake_kms_key_provider() + plaintext = io.BytesIO(VALUES["plaintext_128"]) + ciphertext, _header = aws_encryption_sdk.encrypt(source=plaintext, key_provider=key_provider) + with aws_encryption_sdk.StreamDecryptor(source=ciphertext, key_provider=key_provider) as handler: + assert handler.readable() + handler.read() + assert not handler.readable() From 1c7a99ca9db5455c8b08bdde049b13108c2d46af Mon Sep 17 00:00:00 2001 From: mattsb42-aws Date: Wed, 29 Aug 2018 11:12:44 -0700 Subject: [PATCH 2/3] Correctly report that any open stream handler is readable. This addresses https://github.com/aws/aws-encryption-sdk-python/issues/73 --- src/aws_encryption_sdk/streaming_client.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/aws_encryption_sdk/streaming_client.py b/src/aws_encryption_sdk/streaming_client.py index 2a27d25fc..35238ffc2 100644 --- a/src/aws_encryption_sdk/streaming_client.py +++ b/src/aws_encryption_sdk/streaming_client.py @@ -193,6 +193,15 @@ def __exit__(self, exc_type, exc_value, traceback): _LOGGER.exception("Error on closing") return False + def readable(self): + # () -> bool + """Return `True` if the stream can be read from. + + :rtype: bool + """ + # Open streams are currently always readable. + return not self.closed + def read(self, b=None): """Returns either the requested number of bytes or the entire stream. From 7976c3d4c15dc60ca300a2a2275fd54161f35735 Mon Sep 17 00:00:00 2001 From: mattsb42-aws Date: Wed, 29 Aug 2018 11:18:43 -0700 Subject: [PATCH 3/3] bump to 1.3.6 with changelog --- CHANGELOG.rst | 10 +++++++++- src/aws_encryption_sdk/identifiers.py | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ea4086be3..a9847f62e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,14 @@ Changelog ********* +1.3.6 -- 2018-08-29 +=================== + +Bugfixes +-------- +* :class:`StreamEncryptor` and :class:`StreamDecryptor` should always report as readable if they are open. + `#73 `_ + 1.3.5 -- 2018-08-01 =================== * Move the ``aws-encryption-sdk-python`` repository from ``awslabs`` to ``aws``. @@ -18,7 +26,7 @@ Maintenance ----------- * New minimum pytest version 3.3.1 to avoid bugs in 3.3.0 `#32 `_ -* New minimum attrs version 17.4.0 to allow use of `converter` rather than `convert` +* New minimum attrs version 17.4.0 to allow use of ``converter`` rather than ``convert`` `#39 `_ * Algorithm Suites are modeled as collections of sub-suites now `#36 `_ diff --git a/src/aws_encryption_sdk/identifiers.py b/src/aws_encryption_sdk/identifiers.py index a7e06ea52..2526b366e 100644 --- a/src/aws_encryption_sdk/identifiers.py +++ b/src/aws_encryption_sdk/identifiers.py @@ -21,7 +21,7 @@ from aws_encryption_sdk.exceptions import InvalidAlgorithmError -__version__ = "1.3.5" +__version__ = "1.3.6" USER_AGENT_SUFFIX = "AwsEncryptionSdkPython/{}".format(__version__)