aboutsummaryrefslogtreecommitdiff
path: root/pyasn1/type/char.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyasn1/type/char.py')
-rw-r--r--pyasn1/type/char.py40
1 files changed, 26 insertions, 14 deletions
diff --git a/pyasn1/type/char.py b/pyasn1/type/char.py
index 617b98d..3f8c444 100644
--- a/pyasn1/type/char.py
+++ b/pyasn1/type/char.py
@@ -21,15 +21,19 @@ noValue = univ.noValue
class AbstractCharacterString(univ.OctetString):
"""Creates |ASN.1| schema or value object.
- |ASN.1| objects are immutable and duck-type Python 2 :class:`unicode` or Python 3 :class:`str`.
- When used in octet-stream context, |ASN.1| type assumes "|encoding|" encoding.
+ |ASN.1| class is based on :class:`~pyasn1.type.base.SimpleAsn1Type`,
+ its objects are immutable and duck-type Python 2 :class:`str` or Python 3
+ :class:`bytes`. When used in octet-stream context, |ASN.1| type assumes
+ "|encoding|" encoding.
Keyword Args
------------
value: :class:`unicode`, :class:`str`, :class:`bytes` or |ASN.1| object
- unicode object (Python 2) or string (Python 3), alternatively string
- (Python 2) or bytes (Python 3) representing octet-stream of serialised
- unicode string (note `encoding` parameter) or |ASN.1| class instance.
+ :class:`unicode` object (Python 2) or :class:`str` (Python 3),
+ alternatively :class:`str` (Python 2) or :class:`bytes` (Python 3)
+ representing octet-stream of serialised unicode string
+ (note `encoding` parameter) or |ASN.1| class instance.
+ If `value` is not given, schema object will be created.
tagSet: :py:class:`~pyasn1.type.tag.TagSet`
Object representing non-default ASN.1 tag(s)
@@ -44,7 +48,7 @@ class AbstractCharacterString(univ.OctetString):
Raises
------
- :py:class:`~pyasn1.error.PyAsn1Error`
+ ~pyasn1.error.ValueConstraintError, ~pyasn1.error.PyAsn1Error
On constraint violation or bad initializer.
"""
@@ -55,8 +59,10 @@ class AbstractCharacterString(univ.OctetString):
return self._value.encode(self.encoding)
except UnicodeEncodeError:
- raise error.PyAsn1Error(
- "Can't encode string '%s' with codec %s" % (self._value, self.encoding)
+ exc = sys.exc_info()[1]
+ raise error.PyAsn1UnicodeEncodeError(
+ "Can't encode string '%s' with codec "
+ "%s" % (self._value, self.encoding), exc
)
def __unicode__(self):
@@ -76,8 +82,10 @@ class AbstractCharacterString(univ.OctetString):
return unicode(value)
except (UnicodeDecodeError, LookupError):
- raise error.PyAsn1Error(
- "Can't decode string '%s' with codec %s" % (value, self.encoding)
+ exc = sys.exc_info()[1]
+ raise error.PyAsn1UnicodeDecodeError(
+ "Can't decode string '%s' with codec "
+ "%s" % (value, self.encoding), exc
)
def asOctets(self, padding=True):
@@ -95,8 +103,10 @@ class AbstractCharacterString(univ.OctetString):
try:
return self._value.encode(self.encoding)
except UnicodeEncodeError:
- raise error.PyAsn1Error(
- "Can't encode string '%s' with codec %s" % (self._value, self.encoding)
+ exc = sys.exc_info()[1]
+ raise error.PyAsn1UnicodeEncodeError(
+ "Can't encode string '%s' with codec "
+ "%s" % (self._value, self.encoding), exc
)
def prettyIn(self, value):
@@ -113,8 +123,10 @@ class AbstractCharacterString(univ.OctetString):
return str(value)
except (UnicodeDecodeError, LookupError):
- raise error.PyAsn1Error(
- "Can't decode string '%s' with codec %s" % (value, self.encoding)
+ exc = sys.exc_info()[1]
+ raise error.PyAsn1UnicodeDecodeError(
+ "Can't decode string '%s' with codec "
+ "%s" % (value, self.encoding), exc
)
def asOctets(self, padding=True):