summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2019-11-16 12:06:16 +0100
committerIlya Etingof <etingof@gmail.com>2019-11-16 12:06:16 +0100
commit8393983359edc25b75cbe07f0d4c13497285aa71 (patch)
tree78a3a65bd81653b9a3f06a6562650d82c42fbd1f
parent3e802d75b8fc679382d2b37501efb2f38be0518b (diff)
downloadpyasn1-git-8393983359edc25b75cbe07f0d4c13497285aa71.tar.gz
Refactor codec classes linkage
Make it looking more uniform and easier to override if needed.
-rw-r--r--pyasn1/codec/ber/decoder.py14
-rw-r--r--pyasn1/codec/ber/encoder.py11
-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.py10
-rw-r--r--pyasn1/codec/native/encoder.py11
-rw-r--r--tests/codec/ber/test_decoder.py2
9 files changed, 34 insertions, 22 deletions
diff --git a/pyasn1/codec/ber/decoder.py b/pyasn1/codec/ber/decoder.py
index af9d89e..6dc8866 100644
--- a/pyasn1/codec/ber/decoder.py
+++ b/pyasn1/codec/ber/decoder.py
@@ -1899,16 +1899,17 @@ class StreamingDecoder(object):
1 2 3
"""
- SINGLE_ITEM_DECODER = SingleItemDecoder()
+ SINGLE_ITEM_DECODER = SingleItemDecoder
- def __init__(self, substrate, asn1Spec=None, **kwargs):
+ def __init__(self, substrate, asn1Spec=None, **options):
+ self._singleItemDecoder = self.SINGLE_ITEM_DECODER()
self._substrate = asSeekableStream(substrate)
self._asn1Spec = asn1Spec
- self._options = kwargs
+ self._options = options
def __iter__(self):
while True:
- for asn1Object in self.SINGLE_ITEM_DECODER(
+ for asn1Object in self._singleItemDecoder(
self._substrate, self._asn1Spec, **self._options):
yield asn1Object
@@ -1990,7 +1991,10 @@ class Decoder(object):
"""
substrate = asSeekableStream(substrate)
- for asn1Object in cls.STREAMING_DECODER(substrate, asn1Spec, **kwargs):
+ streamingDecoder = cls.STREAMING_DECODER(
+ substrate, asn1Spec, **kwargs)
+
+ for asn1Object in streamingDecoder:
if isinstance(asn1Object, SubstrateUnderrunError):
raise error.SubstrateUnderrunError('Short substrate on input')
diff --git a/pyasn1/codec/ber/encoder.py b/pyasn1/codec/ber/encoder.py
index e80a007..7ee9b47 100644
--- a/pyasn1/codec/ber/encoder.py
+++ b/pyasn1/codec/ber/encoder.py
@@ -846,11 +846,14 @@ class SingleItemEncoder(object):
class Encoder(object):
- SINGLE_ITEM_ENCODER = SingleItemEncoder()
+ SINGLE_ITEM_ENCODER = SingleItemEncoder
- @classmethod
- def __call__(cls, pyObject, asn1Spec=None, **options):
- return cls.SINGLE_ITEM_ENCODER(pyObject, asn1Spec=asn1Spec, **options)
+ def __init__(self, **options):
+ self._singleItemEncoder = self.SINGLE_ITEM_ENCODER()
+
+ def __call__(self, pyObject, asn1Spec=None, **options):
+ return self._singleItemEncoder(
+ 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 852415a..0a92b26 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 b11c7ff..9e6cdac 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 ff3f004..b9526c3 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 21102b8..1a6af82 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 04ae129..db30c71 100644
--- a/pyasn1/codec/native/decoder.py
+++ b/pyasn1/codec/native/decoder.py
@@ -181,11 +181,13 @@ class SingleItemDecoder(object):
class Decoder(object):
- SINGLE_ITEM_DECODER = SingleItemDecoder()
+ SINGLE_ITEM_DECODER = SingleItemDecoder
- @classmethod
- def __call__(cls, pyObject, asn1Spec=None, **kwargs):
- return cls.SINGLE_ITEM_DECODER(pyObject, asn1Spec=asn1Spec, **kwargs)
+ def __init__(self, **options):
+ self._singleItemDecoder = self.SINGLE_ITEM_DECODER()
+
+ def __call__(self, pyObject, asn1Spec=None, **kwargs):
+ return self._singleItemDecoder(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 0001916..d0d65ec 100644
--- a/pyasn1/codec/native/encoder.py
+++ b/pyasn1/codec/native/encoder.py
@@ -225,11 +225,14 @@ class SingleItemEncoder(object):
class Encoder(object):
- SINGLE_ITEM_ENCODER = SingleItemEncoder()
+ SINGLE_ITEM_ENCODER = SingleItemEncoder
- @classmethod
- def __call__(cls, pyObject, asn1Spec=None, **kwargs):
- return cls.SINGLE_ITEM_ENCODER(pyObject, asn1Spec=asn1Spec, **kwargs)
+ def __init__(self, **kwargs):
+ self._singleItemEncoder = self.SINGLE_ITEM_ENCODER()
+
+ def __call__(self, pyObject, asn1Spec=None, **options):
+ return self._singleItemEncoder(
+ pyObject, asn1Spec=asn1Spec, **options)
#: 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 4b73f6a..a559209 100644
--- a/tests/codec/ber/test_decoder.py
+++ b/tests/codec/ber/test_decoder.py
@@ -1615,7 +1615,7 @@ class ErrorOnDecodingTestCase(BaseTestCase):
defaultErrorState = decoder.stDumpRawValue
class StreamingDecoder(decoder.StreamingDecoder):
- SINGLE_ITEM_DECODER = SingleItemEncoder()
+ SINGLE_ITEM_DECODER = SingleItemEncoder
class OneShotDecoder(decoder.Decoder):
STREAMING_DECODER = StreamingDecoder