Skip to content

Commit 954ce66

Browse files
authored
Merge pull request #74 from mattsb42-aws/dev-73
Fix stream handler implementation of readable()
2 parents d2f1e80 + 7976c3d commit 954ce66

File tree

4 files changed

+40
-2
lines changed

4 files changed

+40
-2
lines changed

CHANGELOG.rst

+9-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22
Changelog
33
*********
44

5+
1.3.6 -- 2018-08-29
6+
===================
7+
8+
Bugfixes
9+
--------
10+
* :class:`StreamEncryptor` and :class:`StreamDecryptor` should always report as readable if they are open.
11+
`#73 <https://github.com/aws/aws-encryption-sdk-python/issues/73>`_
12+
513
1.3.5 -- 2018-08-01
614
===================
715
* Move the ``aws-encryption-sdk-python`` repository from ``awslabs`` to ``aws``.
@@ -18,7 +26,7 @@ Maintenance
1826
-----------
1927
* New minimum pytest version 3.3.1 to avoid bugs in 3.3.0
2028
`#32 <https://github.com/aws/aws-encryption-sdk-python/issues/32>`_
21-
* New minimum attrs version 17.4.0 to allow use of `converter` rather than `convert`
29+
* New minimum attrs version 17.4.0 to allow use of ``converter`` rather than ``convert``
2230
`#39 <https://github.com/aws/aws-encryption-sdk-python/issues/39>`_
2331
* Algorithm Suites are modeled as collections of sub-suites now
2432
`#36 <https://github.com/aws/aws-encryption-sdk-python/pull/36>`_

src/aws_encryption_sdk/identifiers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
from aws_encryption_sdk.exceptions import InvalidAlgorithmError
2323

24-
__version__ = "1.3.5"
24+
__version__ = "1.3.6"
2525
USER_AGENT_SUFFIX = "AwsEncryptionSdkPython/{}".format(__version__)
2626

2727

src/aws_encryption_sdk/streaming_client.py

+9
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,15 @@ def __exit__(self, exc_type, exc_value, traceback):
193193
_LOGGER.exception("Error on closing")
194194
return False
195195

196+
def readable(self):
197+
# () -> bool
198+
"""Return `True` if the stream can be read from.
199+
200+
:rtype: bool
201+
"""
202+
# Open streams are currently always readable.
203+
return not self.closed
204+
196205
def read(self, b=None):
197206
"""Returns either the requested number of bytes or the entire stream.
198207

test/functional/test_f_aws_encryption_sdk_client.py

+21
Original file line numberDiff line numberDiff line change
@@ -574,3 +574,24 @@ def test_decrypt_oneshot_no_seek_input():
574574
ciphertext_no_seek = NoSeekBytesIO(ciphertext)
575575
decrypted, _header = aws_encryption_sdk.decrypt(source=ciphertext_no_seek, key_provider=key_provider)
576576
assert decrypted == VALUES["plaintext_128"]
577+
578+
579+
def test_stream_encryptor_readable():
580+
"""Verify that open StreamEncryptor instances report as readable."""
581+
key_provider = fake_kms_key_provider()
582+
plaintext = io.BytesIO(VALUES["plaintext_128"])
583+
with aws_encryption_sdk.StreamEncryptor(source=plaintext, key_provider=key_provider) as handler:
584+
assert handler.readable()
585+
handler.read()
586+
assert not handler.readable()
587+
588+
589+
def test_stream_decryptor_readable():
590+
"""Verify that open StreamEncryptor instances report as readable."""
591+
key_provider = fake_kms_key_provider()
592+
plaintext = io.BytesIO(VALUES["plaintext_128"])
593+
ciphertext, _header = aws_encryption_sdk.encrypt(source=plaintext, key_provider=key_provider)
594+
with aws_encryption_sdk.StreamDecryptor(source=ciphertext, key_provider=key_provider) as handler:
595+
assert handler.readable()
596+
handler.read()
597+
assert not handler.readable()

0 commit comments

Comments
 (0)