Move often used ones during decoding at the very beginning.
+.. _release4.8:
+
+4.8
+---
+* Minor decode speed improvements
+
self._value = default
def _value_sanitize(self, value):
self._value = default
def _value_sanitize(self, value):
- if issubclass(value.__class__, Boolean):
- return value._value
if isinstance(value, bool):
return value
if isinstance(value, bool):
return value
+ if issubclass(value.__class__, Boolean):
+ return value._value
raise InvalidValueType((self.__class__, bool))
@property
raise InvalidValueType((self.__class__, bool))
@property
self._value = default
def _value_sanitize(self, value):
self._value = default
def _value_sanitize(self, value):
- if issubclass(value.__class__, Integer):
- value = value._value
- elif isinstance(value, integer_types):
+ if isinstance(value, integer_types):
+ elif issubclass(value.__class__, Integer):
+ value = value._value
elif isinstance(value, str):
value = self.specs.get(value)
if value is None:
elif isinstance(value, str):
value = self.specs.get(value)
if value is None:
return bit_len, bytes(octets)
def _value_sanitize(self, value):
return bit_len, bytes(octets)
def _value_sanitize(self, value):
- if issubclass(value.__class__, BitString):
- return value._value
if isinstance(value, (string_types, binary_type)):
if (
isinstance(value, string_types) and
if isinstance(value, (string_types, binary_type)):
if (
isinstance(value, string_types) and
("1" if bit in bits else "0")
for bit in six_xrange(max(bits) + 1)
))
("1" if bit in bits else "0")
for bit in six_xrange(max(bits) + 1)
))
+ if issubclass(value.__class__, BitString):
+ return value._value
raise InvalidValueType((self.__class__, binary_type, string_types))
@property
raise InvalidValueType((self.__class__, binary_type, string_types))
@property
)
def _value_sanitize(self, value):
)
def _value_sanitize(self, value):
- if issubclass(value.__class__, OctetString):
- value = value._value
- elif isinstance(value, binary_type):
+ if isinstance(value, binary_type):
+ elif issubclass(value.__class__, OctetString):
+ value = value._value
else:
raise InvalidValueType((self.__class__, bytes))
if not self._bound_min <= len(value) <= self._bound_max:
else:
raise InvalidValueType((self.__class__, bytes))
if not self._bound_min <= len(value) <= self._bound_max:
self._value = default
def _value_sanitize(self, value):
self._value = default
def _value_sanitize(self, value):
- if isinstance(value, self.__class__):
- return value._value
- if isinstance(value, datetime):
- return value.strftime(self.fmt).encode("ascii")
if isinstance(value, binary_type):
try:
value_decoded = value.decode("ascii")
if isinstance(value, binary_type):
try:
value_decoded = value.decode("ascii")
return value
else:
raise DecodeError("invalid UTCTime length")
return value
else:
raise DecodeError("invalid UTCTime length")
+ if isinstance(value, self.__class__):
+ return value._value
+ if isinstance(value, datetime):
+ return value.strftime(self.fmt).encode("ascii")
raise InvalidValueType((self.__class__, datetime))
def __eq__(self, their):
raise InvalidValueType((self.__class__, datetime))
def __eq__(self, their):
fmt_ms = "%Y%m%d%H%M%S.%fZ"
def _value_sanitize(self, value):
fmt_ms = "%Y%m%d%H%M%S.%fZ"
def _value_sanitize(self, value):
- if isinstance(value, self.__class__):
- return value._value
- if isinstance(value, datetime):
- return value.strftime(
- self.fmt_ms if value.microsecond > 0 else self.fmt
- ).encode("ascii")
if isinstance(value, binary_type):
try:
value_decoded = value.decode("ascii")
if isinstance(value, binary_type):
try:
value_decoded = value.decode("ascii")
"invalid GeneralizedTime length",
klass=self.__class__,
)
"invalid GeneralizedTime length",
klass=self.__class__,
)
+ if isinstance(value, self.__class__):
+ return value._value
+ if isinstance(value, datetime):
+ return value.strftime(
+ self.fmt_ms if value.microsecond > 0 else self.fmt
+ ).encode("ascii")
raise InvalidValueType((self.__class__, datetime))
def todatetime(self):
raise InvalidValueType((self.__class__, datetime))
def todatetime(self):
self._value = default_obj.copy()._value
def _value_sanitize(self, value):
self._value = default_obj.copy()._value
def _value_sanitize(self, value):
- if isinstance(value, self.__class__):
- return value._value
if isinstance(value, tuple) and len(value) == 2:
choice, obj = value
spec = self.specs.get(choice)
if isinstance(value, tuple) and len(value) == 2:
choice, obj = value
spec = self.specs.get(choice)
if not isinstance(obj, spec.__class__):
raise InvalidValueType((spec,))
return (choice, spec(obj))
if not isinstance(obj, spec.__class__):
raise InvalidValueType((spec,))
return (choice, spec(obj))
+ if isinstance(value, self.__class__):
+ return value._value
raise InvalidValueType((self.__class__, tuple))
@property
raise InvalidValueType((self.__class__, tuple))
@property
self.defined = None
def _value_sanitize(self, value):
self.defined = None
def _value_sanitize(self, value):
+ if isinstance(value, binary_type):
+ return value
if isinstance(value, self.__class__):
return value._value
if isinstance(value, Obj):
return value.encode()
if isinstance(value, self.__class__):
return value._value
if isinstance(value, Obj):
return value.encode()
- if isinstance(value, binary_type):
- return value
raise InvalidValueType((self.__class__, Obj, binary_type))
@property
raise InvalidValueType((self.__class__, Obj, binary_type))
@property