diff options
author | Ilya Etingof <etingof@gmail.com> | 2017-09-10 17:57:08 +0200 |
---|---|---|
committer | Ilya Etingof <etingof@gmail.com> | 2017-09-10 17:57:08 +0200 |
commit | 9ca6884c92d68e15942539c6126c0e5b00643c41 (patch) | |
tree | 9e86864806013068d7278f20039055ae9fe98848 | |
parent | c550820832cc8593eed2398e87d27d323dfc39a3 (diff) | |
download | pyasn1-git-9ca6884c92d68e15942539c6126c0e5b00643c41.tar.gz |
refer to open types by open types, not hole types
-rw-r--r-- | pyasn1/codec/ber/decoder.py | 14 | ||||
-rw-r--r-- | pyasn1/type/namedtype.py | 8 | ||||
-rw-r--r-- | pyasn1/type/opentype.py (renamed from pyasn1/type/definedby.py) | 4 | ||||
-rw-r--r-- | tests/codec/ber/test_decoder.py | 54 |
4 files changed, 38 insertions, 42 deletions
diff --git a/pyasn1/codec/ber/decoder.py b/pyasn1/codec/ber/decoder.py index f8f0587..73167a2 100644 --- a/pyasn1/codec/ber/decoder.py +++ b/pyasn1/codec/ber/decoder.py @@ -511,21 +511,21 @@ class UniversalConstructedTypeDecoder(AbstractConstructedDecoder): seenIndices.add(idx) idx += 1 - if namedTypes: + if namedTypes and options.get('decodeOpenTypes', False): if not namedTypes.requiredComponents.issubset(seenIndices): raise error.PyAsn1Error('ASN.1 object %s has uninitialized components' % asn1Object.__class__.__name__) for idx, namedType in enumerate(namedTypes.namedTypes): - if not namedType.definedBy: + if not namedType.openType: continue governingValue = asn1Object.getComponentByName( - namedType.definedBy.name + namedType.openType.name ) try: - asn1Spec = namedType.definedBy[governingValue] + asn1Spec = namedType.openType[governingValue] except KeyError: continue @@ -638,15 +638,15 @@ class UniversalConstructedTypeDecoder(AbstractConstructedDecoder): raise error.PyAsn1Error('ASN.1 object %s has uninitialized components' % asn1Object.__class__.__name__) for idx, namedType in enumerate(namedTypes.namedTypes): - if not namedType.definedBy: + if not namedType.openType: continue governingValue = asn1Object.getComponentByName( - namedType.definedBy.name + namedType.openType.name ) try: - asn1Spec = namedType.definedBy[governingValue] + asn1Spec = namedType.openType[governingValue] except KeyError: continue diff --git a/pyasn1/type/namedtype.py b/pyasn1/type/namedtype.py index 69b4422..cba9524 100644 --- a/pyasn1/type/namedtype.py +++ b/pyasn1/type/namedtype.py @@ -30,11 +30,11 @@ class NamedType(object): isOptional = False isDefaulted = False - def __init__(self, name, asn1Object, definedBy=None): + def __init__(self, name, asn1Object, openType=None): self.__name = name self.__type = asn1Object self.__nameAndType = name, asn1Object - self.__definedBy = definedBy + self.__openType = openType def __repr__(self): return '%s(%r, %r)' % (self.__class__.__name__, self.__name, self.__type) @@ -75,8 +75,8 @@ class NamedType(object): return self.__type @property - def definedBy(self): - return self.__definedBy + def openType(self): + return self.__openType # Backward compatibility diff --git a/pyasn1/type/definedby.py b/pyasn1/type/opentype.py index e22d394..9788a56 100644 --- a/pyasn1/type/definedby.py +++ b/pyasn1/type/opentype.py @@ -5,10 +5,10 @@ # License: http://pyasn1.sf.net/license.html # -__all__ = ['DefinedBy'] +__all__ = ['OpenType'] -class DefinedBy(object): +class OpenType(object): """Create ASN.1 type map indexed by a value The *DefinedBy* object models the ASN.1 *DEFINED BY* clause which maps diff --git a/tests/codec/ber/test_decoder.py b/tests/codec/ber/test_decoder.py index 45cd530..85c71fb 100644 --- a/tests/codec/ber/test_decoder.py +++ b/tests/codec/ber/test_decoder.py @@ -10,7 +10,7 @@ try: except ImportError: import unittest -from pyasn1.type import tag, namedtype, univ, char, definedby +from pyasn1.type import tag, namedtype, opentype, univ, char from pyasn1.codec.ber import decoder, eoo from pyasn1.compat.octets import ints2octs, str2octs, null from pyasn1.error import PyAsn1Error @@ -825,7 +825,7 @@ class SequenceDecoderWithSchemaTestCase(unittest.TestCase): class SequenceDecoderWithIntegerHoleTypesTestCase(unittest.TestCase): def setUp(self): - definedBy = definedby.DefinedBy( + openType = opentype.OpenType( 'id', [(1, univ.Integer()), (2, univ.OctetString())] @@ -833,48 +833,44 @@ class SequenceDecoderWithIntegerHoleTypesTestCase(unittest.TestCase): self.s = univ.Sequence( componentType=namedtype.NamedTypes( namedtype.NamedType('id', univ.Integer()), - namedtype.NamedType('blob', univ.Any(), definedBy=definedBy) + namedtype.NamedType('blob', univ.Any(), openType=openType) ) ) - # def testChoiceOne(self): - # s, r = decoder.decode( - # ints2octs((48, 6, 2, 1, 1, 2, 1, 12)), - # asn1Spec=self.s - # ) - # assert not r - # assert s[0] == 1 - # assert s[1] == ints2octs((2, 1, 12)) - # - # def testChoiceTwo(self): - # s, r = decoder.decode( - # ints2octs((48, 16, 2, 1, 2, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), - # asn1Spec=self.s - # ) - # assert not r - # assert s[0] == 1 - # assert s[1] == ints2octs((4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)) - - def testChoiceOneResolveHoles(self): + def testChoiceOneDecodeHoles(self): s, r = decoder.decode( - ints2octs((48, 6, 2, 1, 1, 2, 1, 12)), asn1Spec=self.s -# TODO -# resolveHoleTypes=True + ints2octs((48, 6, 2, 1, 1, 2, 1, 12)), asn1Spec=self.s, + decodeOpenTypes=True ) assert not r assert s[0] == 1 assert s[1] == 12 - def testChoiceTwoResolveHoles(self): + def testChoiceTwoDecodeHoles(self): s, r = decoder.decode( - ints2octs((48, 16, 2, 1, 2, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s -# TODO -# resolveHoleTypes = True + ints2octs((48, 16, 2, 1, 2, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s, + decodeOpenTypes = True ) assert not r assert s[0] == 2 assert s[1] == univ.OctetString('quick brown') + def testChoiceOneDontDecodeHoles(self): + s, r = decoder.decode( + ints2octs((48, 6, 2, 1, 1, 2, 1, 12)), asn1Spec=self.s + ) + assert not r + assert s[0] == 1 + assert s[1] == ints2octs((2, 1, 12)) + + def testChoiceTwoDontDecodeHoles(self): + s, r = decoder.decode( + ints2octs((48, 16, 2, 1, 2, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s + ) + assert not r + assert s[0] == 2 + assert s[1] == ints2octs((4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)) + class SetDecoderTestCase(unittest.TestCase): def setUp(self): |