123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #
- # This file is part of pyasn1 software.
- #
- # Copyright (c) 2005-2018, Ilya Etingof <etingof@gmail.com>
- # License: http://snmplabs.com/pyasn1/license.html
- #
- from pyasn1 import error
-
- __all__ = ['TagMap']
-
-
- class TagMap(object):
- """Map *TagSet* objects to ASN.1 types
-
- Create an object mapping *TagSet* object to ASN.1 type.
-
- *TagMap* objects are immutable and duck-type read-only Python
- :class:`dict` objects holding *TagSet* objects as keys and ASN.1
- type objects as values.
-
- Parameters
- ----------
- presentTypes: :py:class:`dict`
- Map of :class:`~pyasn1.type.tag.TagSet` to ASN.1 objects considered
- as being unconditionally present in the *TagMap*.
-
- skipTypes: :py:class:`dict`
- A collection of :class:`~pyasn1.type.tag.TagSet` objects considered
- as absent in the *TagMap* even when *defaultType* is present.
-
- defaultType: ASN.1 type object
- An ASN.1 type object callee *TagMap* returns for any *TagSet* key not present
- in *presentTypes* (unless given key is present in *skipTypes*).
- """
- def __init__(self, presentTypes=None, skipTypes=None, defaultType=None):
- self.__presentTypes = presentTypes or {}
- self.__skipTypes = skipTypes or {}
- self.__defaultType = defaultType
-
- def __contains__(self, tagSet):
- return (tagSet in self.__presentTypes or
- self.__defaultType is not None and tagSet not in self.__skipTypes)
-
- def __getitem__(self, tagSet):
- try:
- return self.__presentTypes[tagSet]
- except KeyError:
- if self.__defaultType is None:
- raise KeyError()
- elif tagSet in self.__skipTypes:
- raise error.PyAsn1Error('Key in negative map')
- else:
- return self.__defaultType
-
- def __iter__(self):
- return iter(self.__presentTypes)
-
- def __repr__(self):
- representation = '%s object at 0x%x' % (self.__class__.__name__, id(self))
-
- if self.__presentTypes:
- representation += ' present %s' % repr(self.__presentTypes)
-
- if self.__skipTypes:
- representation += ' skip %s' % repr(self.__skipTypes)
-
- if self.__defaultType is not None:
- representation += ' default %s' % repr(self.__defaultType)
-
- return '<%s>' % representation
-
- @property
- def presentTypes(self):
- """Return *TagSet* to ASN.1 type map present in callee *TagMap*"""
- return self.__presentTypes
-
- @property
- def skipTypes(self):
- """Return *TagSet* collection unconditionally absent in callee *TagMap*"""
- return self.__skipTypes
-
- @property
- def defaultType(self):
- """Return default ASN.1 type being returned for any missing *TagSet*"""
- return self.__defaultType
-
- # Backward compatibility
-
- def getPosMap(self):
- return self.presentTypes
-
- def getNegMap(self):
- return self.skipTypes
-
- def getDef(self):
- return self.defaultType
|