diff options
author | Ilya Etingof <etingof@gmail.com> | 2017-04-21 01:09:10 +0200 |
---|---|---|
committer | Ilya Etingof <etingof@gmail.com> | 2017-09-07 22:59:27 +0200 |
commit | 8308c329ac49af66de054158598194f41855699f (patch) | |
tree | 8884b65f347d5f3b5f54f3f64015638a02b744ae /pyasn1/type | |
parent | f53f48553c5e683a0c5e9e8009ef754410f2b9e0 (diff) | |
download | pyasn1-8308c329ac49af66de054158598194f41855699f.tar.gz |
ANY DEFINED BY decoding implemented
Diffstat (limited to 'pyasn1/type')
-rw-r--r-- | pyasn1/type/namedtype.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/pyasn1/type/namedtype.py b/pyasn1/type/namedtype.py index 7a51f18..6bf82f4 100644 --- a/pyasn1/type/namedtype.py +++ b/pyasn1/type/namedtype.py @@ -34,6 +34,8 @@ class NamedType(object): self.__name = name self.__type = asn1Object self.__nameAndType = name, asn1Object + self.__governingName = None + self.__typesMap = None def __repr__(self): return '%s(%r, %r)' % (self.__class__.__name__, self.__name, self.__type) @@ -73,6 +75,19 @@ class NamedType(object): def asn1Object(self): return self.__type + def definedBy(self, governingName, typesMap): + self.__governingName = governingName + self.__typesMap = typesMap + return self + + @property + def governingName(self): + return self.__governingName + + @property + def typesMap(self): + return self.__typesMap + # Backward compatibility def getName(self): @@ -123,6 +138,7 @@ class NamedTypes(object): self.__keys = frozenset([namedType.name for namedType in self.__namedTypes]) self.__values = tuple([namedType.asn1Object for namedType in self.__namedTypes]) self.__items = tuple([(namedType.name, namedType.asn1Object) for namedType in self.__namedTypes]) + self.__holes = self.__computeTypeHoles() def __repr__(self): return '%s(%s)' % ( @@ -509,3 +525,15 @@ class NamedTypes(object): @property def requiredComponents(self): return self.__requiredComponents + + @property + def holes(self): + return self.__holes + + def __computeTypeHoles(self): + holes = [] + for namedType in self.__namedTypes: + if namedType.governingName: + holes.append((namedType.name, namedType.governingName, namedType.typesMap)) + + return holes |