aboutsummaryrefslogtreecommitdiff
path: root/pyasn1/type
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2017-09-08 20:52:36 +0200
committerIlya Etingof <etingof@gmail.com>2017-09-10 14:29:29 +0200
commitd35f412398a54a93ac141d88c41dac411bd05453 (patch)
treec36ccc6dfe8e34909922f9cc6e999378a69956f5 /pyasn1/type
parentc324055b318fa2c01249819c44836214efdfb90e (diff)
downloadpyasn1-d35f412398a54a93ac141d88c41dac411bd05453.tar.gz
WIP: hole types implementation
Diffstat (limited to 'pyasn1/type')
-rw-r--r--pyasn1/type/definedby.py54
-rw-r--r--pyasn1/type/namedtype.py31
2 files changed, 58 insertions, 27 deletions
diff --git a/pyasn1/type/definedby.py b/pyasn1/type/definedby.py
new file mode 100644
index 0000000..e22d394
--- /dev/null
+++ b/pyasn1/type/definedby.py
@@ -0,0 +1,54 @@
+#
+# This file is part of pyasn1 software.
+#
+# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com>
+# License: http://pyasn1.sf.net/license.html
+#
+
+__all__ = ['DefinedBy']
+
+
+class DefinedBy(object):
+ """Create ASN.1 type map indexed by a value
+
+ The *DefinedBy* object models the ASN.1 *DEFINED BY* clause which maps
+ values to ASN.1 types in the context of the ASN.1 SEQUENCE/SET type.
+
+ DefinedBy objects are immutable and duck-type Python :class:`dict` objects
+
+ Parameters
+ ----------
+ name: :py:class:`str`
+ Field name
+
+ *choices:
+ Sequence of (*value*, *type*) tuples representing the mapping
+ """
+
+ def __init__(self, name, args, **kwargs):
+ self.__name = name
+ self.__choices = dict(args, **kwargs)
+
+ @property
+ def name(self):
+ return self.__name
+
+ # Python dict protocol
+
+ def values(self):
+ return self.__choices.values()
+
+ def keys(self):
+ return self.__choices
+
+ def items(self):
+ return self.__choices.items()
+
+ def __contains__(self, key):
+ return key in self.__choices
+
+ def __getitem__(self, key):
+ return self.__choices[key]
+
+ def __iter__(self):
+ return iter(self.__choices)
diff --git a/pyasn1/type/namedtype.py b/pyasn1/type/namedtype.py
index 6bf82f4..69b4422 100644
--- a/pyasn1/type/namedtype.py
+++ b/pyasn1/type/namedtype.py
@@ -30,12 +30,11 @@ class NamedType(object):
isOptional = False
isDefaulted = False
- def __init__(self, name, asn1Object):
+ def __init__(self, name, asn1Object, definedBy=None):
self.__name = name
self.__type = asn1Object
self.__nameAndType = name, asn1Object
- self.__governingName = None
- self.__typesMap = None
+ self.__definedBy = definedBy
def __repr__(self):
return '%s(%r, %r)' % (self.__class__.__name__, self.__name, self.__type)
@@ -75,18 +74,9 @@ 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
+ def definedBy(self):
+ return self.__definedBy
# Backward compatibility
@@ -138,7 +128,6 @@ 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)' % (
@@ -525,15 +514,3 @@ 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