diff --git a/pyasn1/codec/ber/decoder.py b/pyasn1/codec/ber/decoder.py index 985dbe503d5f5d41f16307e0212ee0ebf946e712_cHlhc24xL2NvZGVjL2Jlci9kZWNvZGVyLnB5..8b145416449f456ca224238d2cff45cbcd495336_cHlhc24xL2NvZGVjL2Jlci9kZWNvZGVyLnB5 100644 --- a/pyasn1/codec/ber/decoder.py +++ b/pyasn1/codec/ber/decoder.py @@ -1899,8 +1899,9 @@ 1 2 3 """ - SINGLE_ITEM_DECODER = SingleItemDecoder() - - def __init__(self, substrate, asn1Spec=None, **kwargs): + SINGLE_ITEM_DECODER = SingleItemDecoder + + def __init__(self, substrate, asn1Spec=None, **options): + self._singleItemDecoder = self.SINGLE_ITEM_DECODER() self._substrate = asSeekableStream(substrate) self._asn1Spec = asn1Spec @@ -1905,6 +1906,6 @@ self._substrate = asSeekableStream(substrate) self._asn1Spec = asn1Spec - self._options = kwargs + self._options = options def __iter__(self): while True: @@ -1908,7 +1909,7 @@ 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 @@ """ 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 985dbe503d5f5d41f16307e0212ee0ebf946e712_cHlhc24xL2NvZGVjL2Jlci9lbmNvZGVyLnB5..8b145416449f456ca224238d2cff45cbcd495336_cHlhc24xL2NvZGVjL2Jlci9lbmNvZGVyLnB5 100644 --- a/pyasn1/codec/ber/encoder.py +++ b/pyasn1/codec/ber/encoder.py @@ -846,5 +846,5 @@ class Encoder(object): - SINGLE_ITEM_ENCODER = SingleItemEncoder() + SINGLE_ITEM_ENCODER = SingleItemEncoder @@ -850,7 +850,10 @@ - @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 985dbe503d5f5d41f16307e0212ee0ebf946e712_cHlhc24xL2NvZGVjL2Nlci9kZWNvZGVyLnB5..8b145416449f456ca224238d2cff45cbcd495336_cHlhc24xL2NvZGVjL2Nlci9kZWNvZGVyLnB5 100644 --- a/pyasn1/codec/cer/decoder.py +++ b/pyasn1/codec/cer/decoder.py @@ -80,7 +80,7 @@ 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 985dbe503d5f5d41f16307e0212ee0ebf946e712_cHlhc24xL2NvZGVjL2Nlci9lbmNvZGVyLnB5..8b145416449f456ca224238d2cff45cbcd495336_cHlhc24xL2NvZGVjL2Nlci9lbmNvZGVyLnB5 100644 --- a/pyasn1/codec/cer/encoder.py +++ b/pyasn1/codec/cer/encoder.py @@ -270,7 +270,7 @@ 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 985dbe503d5f5d41f16307e0212ee0ebf946e712_cHlhc24xL2NvZGVjL2Rlci9kZWNvZGVyLnB5..8b145416449f456ca224238d2cff45cbcd495336_cHlhc24xL2NvZGVjL2Rlci9kZWNvZGVyLnB5 100644 --- a/pyasn1/codec/der/decoder.py +++ b/pyasn1/codec/der/decoder.py @@ -50,7 +50,7 @@ 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 985dbe503d5f5d41f16307e0212ee0ebf946e712_cHlhc24xL2NvZGVjL2Rlci9lbmNvZGVyLnB5..8b145416449f456ca224238d2cff45cbcd495336_cHlhc24xL2NvZGVjL2Rlci9lbmNvZGVyLnB5 100644 --- a/pyasn1/codec/der/encoder.py +++ b/pyasn1/codec/der/encoder.py @@ -67,7 +67,7 @@ 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 985dbe503d5f5d41f16307e0212ee0ebf946e712_cHlhc24xL2NvZGVjL25hdGl2ZS9kZWNvZGVyLnB5..8b145416449f456ca224238d2cff45cbcd495336_cHlhc24xL2NvZGVjL25hdGl2ZS9kZWNvZGVyLnB5 100644 --- a/pyasn1/codec/native/decoder.py +++ b/pyasn1/codec/native/decoder.py @@ -181,5 +181,5 @@ class Decoder(object): - SINGLE_ITEM_DECODER = SingleItemDecoder() + SINGLE_ITEM_DECODER = SingleItemDecoder @@ -185,7 +185,9 @@ - @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 985dbe503d5f5d41f16307e0212ee0ebf946e712_cHlhc24xL2NvZGVjL25hdGl2ZS9lbmNvZGVyLnB5..8b145416449f456ca224238d2cff45cbcd495336_cHlhc24xL2NvZGVjL25hdGl2ZS9lbmNvZGVyLnB5 100644 --- a/pyasn1/codec/native/encoder.py +++ b/pyasn1/codec/native/encoder.py @@ -225,5 +225,5 @@ class Encoder(object): - SINGLE_ITEM_ENCODER = SingleItemEncoder() + SINGLE_ITEM_ENCODER = SingleItemEncoder @@ -229,7 +229,10 @@ - @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 985dbe503d5f5d41f16307e0212ee0ebf946e712_dGVzdHMvY29kZWMvYmVyL3Rlc3RfZGVjb2Rlci5weQ==..8b145416449f456ca224238d2cff45cbcd495336_dGVzdHMvY29kZWMvYmVyL3Rlc3RfZGVjb2Rlci5weQ== 100644 --- a/tests/codec/ber/test_decoder.py +++ b/tests/codec/ber/test_decoder.py @@ -1615,7 +1615,7 @@ defaultErrorState = decoder.stDumpRawValue class StreamingDecoder(decoder.StreamingDecoder): - SINGLE_ITEM_DECODER = SingleItemEncoder() + SINGLE_ITEM_DECODER = SingleItemEncoder class OneShotDecoder(decoder.Decoder): STREAMING_DECODER = StreamingDecoder