summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2019-10-03 10:28:52 +0200
committerIlya Etingof <etingof@gmail.com>2019-10-03 10:28:52 +0200
commit0261649b878ccdf6304eb9e9172f45127b882ee3 (patch)
tree7cdecdc0f02f53d577236ee8039ae2329d241237
parent2aa38f0348e74f1151de8bd6c230d58503e85a9a (diff)
downloadpyasn1-git-0261649b878ccdf6304eb9e9172f45127b882ee3.tar.gz
Reuse `SingleItemDecoder` object in `StreamingDecoder`
Try to reuse `SingleItemDecoder` object to leverage its caches.
-rw-r--r--pyasn1/codec/ber/decoder.py7
-rw-r--r--pyasn1/codec/ber/encoder.py5
-rw-r--r--pyasn1/codec/cer/decoder.py2
-rw-r--r--pyasn1/codec/cer/encoder.py2
-rw-r--r--pyasn1/codec/der/decoder.py2
-rw-r--r--pyasn1/codec/der/encoder.py2
-rw-r--r--pyasn1/codec/native/decoder.py5
-rw-r--r--pyasn1/codec/native/encoder.py5
-rw-r--r--tests/codec/ber/test_decoder.py4
9 files changed, 14 insertions, 20 deletions
diff --git a/pyasn1/codec/ber/decoder.py b/pyasn1/codec/ber/decoder.py
index 10b80eb..ba895f1 100644
--- a/pyasn1/codec/ber/decoder.py
+++ b/pyasn1/codec/ber/decoder.py
@@ -1090,8 +1090,6 @@ class ChoicePayloadDecoder(ConstructedPayloadDecoderBase):
tagSet=None, length=None, state=None,
decodeFun=None, substrateFun=None,
**options):
- # head = popSubstream(substrate, length)
-
if asn1Spec is None:
asn1Object = self.protoComponent.clone(tagSet=tagSet)
@@ -1872,17 +1870,16 @@ class StreamingDecoder(object):
1 2 3
"""
- SINGLE_ITEM_DECODER = SingleItemDecoder
+ SINGLE_ITEM_DECODER = SingleItemDecoder()
def __init__(self, substrate, asn1Spec=None, **kwargs):
self._substrate = asSeekableStream(substrate)
self._asn1Spec = asn1Spec
self._options = kwargs
- self._decoder = self.SINGLE_ITEM_DECODER()
def __iter__(self):
while True:
- for asn1Object in self._decoder(
+ for asn1Object in self.SINGLE_ITEM_DECODER(
self._substrate, self._asn1Spec, **self._options):
yield asn1Object
diff --git a/pyasn1/codec/ber/encoder.py b/pyasn1/codec/ber/encoder.py
index 6b77b70..e80a007 100644
--- a/pyasn1/codec/ber/encoder.py
+++ b/pyasn1/codec/ber/encoder.py
@@ -846,12 +846,11 @@ class SingleItemEncoder(object):
class Encoder(object):
- SINGLE_ITEM_ENCODER = SingleItemEncoder
+ SINGLE_ITEM_ENCODER = SingleItemEncoder()
@classmethod
def __call__(cls, pyObject, asn1Spec=None, **options):
- singleItemEncoder = cls.SINGLE_ITEM_ENCODER()
- return singleItemEncoder(pyObject, asn1Spec=asn1Spec, **options)
+ return cls.SINGLE_ITEM_ENCODER(pyObject, asn1Spec=asn1Spec, **options)
#: Turns ASN.1 object into BER octet stream.
diff --git a/pyasn1/codec/cer/decoder.py b/pyasn1/codec/cer/decoder.py
index 0a92b26..852415a 100644
--- a/pyasn1/codec/cer/decoder.py
+++ b/pyasn1/codec/cer/decoder.py
@@ -80,7 +80,7 @@ class SingleItemDecoder(decoder.SingleItemDecoder):
class StreamingDecoder(decoder.StreamingDecoder):
__doc__ = decoder.StreamingDecoder.__doc__
- SINGLE_ITEM_DECODER = SingleItemDecoder
+ SINGLE_ITEM_DECODER = SingleItemDecoder()
class Decoder(decoder.Decoder):
diff --git a/pyasn1/codec/cer/encoder.py b/pyasn1/codec/cer/encoder.py
index 9e6cdac..b11c7ff 100644
--- a/pyasn1/codec/cer/encoder.py
+++ b/pyasn1/codec/cer/encoder.py
@@ -270,7 +270,7 @@ class SingleItemEncoder(encoder.SingleItemEncoder):
class Encoder(encoder.Encoder):
- SINGLE_ITEM_ENCODER = SingleItemEncoder
+ SINGLE_ITEM_ENCODER = SingleItemEncoder()
#: Turns ASN.1 object into CER octet stream.
diff --git a/pyasn1/codec/der/decoder.py b/pyasn1/codec/der/decoder.py
index b9526c3..ff3f004 100644
--- a/pyasn1/codec/der/decoder.py
+++ b/pyasn1/codec/der/decoder.py
@@ -50,7 +50,7 @@ class SingleItemDecoder(decoder.SingleItemDecoder):
class StreamingDecoder(decoder.StreamingDecoder):
__doc__ = decoder.StreamingDecoder.__doc__
- SINGLE_ITEM_DECODER = SingleItemDecoder
+ SINGLE_ITEM_DECODER = SingleItemDecoder()
class Decoder(decoder.Decoder):
diff --git a/pyasn1/codec/der/encoder.py b/pyasn1/codec/der/encoder.py
index 1a6af82..21102b8 100644
--- a/pyasn1/codec/der/encoder.py
+++ b/pyasn1/codec/der/encoder.py
@@ -67,7 +67,7 @@ class SingleItemEncoder(encoder.SingleItemEncoder):
class Encoder(encoder.Encoder):
- SINGLE_ITEM_ENCODER = SingleItemEncoder
+ SINGLE_ITEM_ENCODER = SingleItemEncoder()
#: Turns ASN.1 object into DER octet stream.
diff --git a/pyasn1/codec/native/decoder.py b/pyasn1/codec/native/decoder.py
index ecb1b16..04ae129 100644
--- a/pyasn1/codec/native/decoder.py
+++ b/pyasn1/codec/native/decoder.py
@@ -181,12 +181,11 @@ class SingleItemDecoder(object):
class Decoder(object):
- SINGLE_ITEM_DECODER = SingleItemDecoder
+ SINGLE_ITEM_DECODER = SingleItemDecoder()
@classmethod
def __call__(cls, pyObject, asn1Spec=None, **kwargs):
- singleItemDecoder = cls.SINGLE_ITEM_DECODER()
- return singleItemDecoder(pyObject, asn1Spec=asn1Spec, **kwargs)
+ return cls.SINGLE_ITEM_DECODER(pyObject, asn1Spec=asn1Spec, **kwargs)
#: Turns Python objects of built-in types into ASN.1 objects.
diff --git a/pyasn1/codec/native/encoder.py b/pyasn1/codec/native/encoder.py
index a3e17a9..0001916 100644
--- a/pyasn1/codec/native/encoder.py
+++ b/pyasn1/codec/native/encoder.py
@@ -225,12 +225,11 @@ class SingleItemEncoder(object):
class Encoder(object):
- SINGLE_ITEM_ENCODER = SingleItemEncoder
+ SINGLE_ITEM_ENCODER = SingleItemEncoder()
@classmethod
def __call__(cls, pyObject, asn1Spec=None, **kwargs):
- singleItemEncoder = cls.SINGLE_ITEM_ENCODER()
- return singleItemEncoder(pyObject, asn1Spec=asn1Spec, **kwargs)
+ return cls.SINGLE_ITEM_ENCODER(pyObject, asn1Spec=asn1Spec, **kwargs)
#: Turns ASN.1 object into a Python built-in type object(s).
diff --git a/tests/codec/ber/test_decoder.py b/tests/codec/ber/test_decoder.py
index 8f3d614..4b73f6a 100644
--- a/tests/codec/ber/test_decoder.py
+++ b/tests/codec/ber/test_decoder.py
@@ -1611,11 +1611,11 @@ class ErrorOnDecodingTestCase(BaseTestCase):
substrate = ints2octs((31, 8, 2, 1, 1, 131, 3, 2, 1, 12))
stream = streaming.asSeekableStream(substrate)
- class StateMachine(decoder.SingleItemDecoder):
+ class SingleItemEncoder(decoder.SingleItemDecoder):
defaultErrorState = decoder.stDumpRawValue
class StreamingDecoder(decoder.StreamingDecoder):
- SINGLE_ITEM_DECODER = StateMachine
+ SINGLE_ITEM_DECODER = SingleItemEncoder()
class OneShotDecoder(decoder.Decoder):
STREAMING_DECODER = StreamingDecoder