diff options
author | Ilya Etingof <etingof@gmail.com> | 2019-10-01 10:31:21 +0200 |
---|---|---|
committer | Ilya Etingof <etingof@gmail.com> | 2019-11-15 19:39:11 +0100 |
commit | b75800d3c5b7b0996f5d19c1787106509882d212 (patch) | |
tree | 65955ddc3c4db1efc5ab8b94dc92b65081ffd374 | |
parent | 5283ebbad9905606eb44a8daeb39da34353b3d99 (diff) | |
download | pyasn1-git-b75800d3c5b7b0996f5d19c1787106509882d212.tar.gz |
Add minor performance optimising changes
-rw-r--r-- | pyasn1/codec/ber/decoder.py | 6 | ||||
-rw-r--r-- | pyasn1/codec/streaming.py | 7 |
2 files changed, 9 insertions, 4 deletions
diff --git a/pyasn1/codec/ber/decoder.py b/pyasn1/codec/ber/decoder.py index 8dbba5e..d9e197e 100644 --- a/pyasn1/codec/ber/decoder.py +++ b/pyasn1/codec/ber/decoder.py @@ -1471,6 +1471,9 @@ for typeDecoder in TAG_MAP.values(): stStop) = [x for x in range(10)] +EOO_SENTINEL = ints2octs((0, 0)) + + class SingleItemDecoder(object): defaultErrorState = stErrorCondition #defaultErrorState = stDumpRawValue @@ -1487,7 +1490,6 @@ class SingleItemDecoder(object): # Tag & TagSet objects caches self.__tagCache = {} self.__tagSetCache = {} - self.__eooSentinel = ints2octs((0, 0)) def __call__(self, substrate, asn1Spec=None, tagSet=None, length=None, state=stDecodeTag, @@ -1508,7 +1510,7 @@ class SingleItemDecoder(object): if isinstance(eoo_candidate, SubstrateUnderrunError): yield eoo_candidate - if eoo_candidate == self.__eooSentinel: + if eoo_candidate == EOO_SENTINEL: if LOG: LOG('end-of-octets sentinel found') yield eoo.endOfOctets diff --git a/pyasn1/codec/streaming.py b/pyasn1/codec/streaming.py index 65c318c..6d0146b 100644 --- a/pyasn1/codec/streaming.py +++ b/pyasn1/codec/streaming.py @@ -98,7 +98,10 @@ def asSeekableStream(substrate): : :py:class:`~pyasn1.error.PyAsn1Error` If the supplied substrate cannot be converted to a seekable stream. """ - if isinstance(substrate, bytes): + if isinstance(substrate, io.BytesIO): + return substrate + + elif isinstance(substrate, bytes): return io.BytesIO(substrate) elif isinstance(substrate, univ.OctetString): @@ -225,7 +228,7 @@ def readFromStream(substrate, size=-1, context=None): if received is None: # non-blocking stream can do this yield error.SubstrateUnderrunError(context=context) - elif size != 0 and not received: # end-of-stream + elif not received and size != 0: # end-of-stream raise error.EndOfStreamError(context=context) elif len(received) < size: |