Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
self.encode_length(6, 0x1c)
encoder(self, value)
else:
self._shared_containers[value_id] = (value, None)
try:
encoder(self, value)
finally:
del self._shared_containers[value_id]
else:
if self.value_sharing:
# Generate a reference to the previous index instead of
# encoding this again
self.encode_length(6, 0x1d)
self.encode_int(index)
else:
raise CBOREncodeValueError(
'cyclic data structure detected but value sharing is '
'disabled')
def _find_encoder(self, obj_type):
for type_, enc in list(iteritems(self._encoders)):
if type(type_) is tuple:
try:
modname, typename = type_
except (TypeError, ValueError):
raise CBOREncodeValueError(
"invalid deferred encoder type {!r} (must be a "
"2-tuple of module name and type name, e.g. "
"('collections', 'defaultdict'))".format(type_))
imported_type = getattr(modules.get(modname), typename, None)
if imported_type is not None:
del self._encoders[type_]
self._encoders[imported_type] = enc
type_ = imported_type
else: # pragma: nocover
continue
if issubclass(obj_type, type_):
self._encoders[obj_type] = enc
return enc
return None
def encode_datetime(self, value):
# Semantic tag 0
if not value.tzinfo:
if self._timezone:
value = value.replace(tzinfo=self._timezone)
else:
raise CBOREncodeValueError(
'naive datetime {!r} encountered and no default timezone '
'has been set'.format(value))
if self.datetime_as_timestamp:
from calendar import timegm
if not value.microsecond:
timestamp = timegm(value.utctimetuple())
else:
timestamp = timegm(value.utctimetuple()) + value.microsecond / 1000000
self.encode_semantic(CBORTag(1, timestamp))
else:
datestring = as_unicode(value.isoformat().replace('+00:00', 'Z'))
self.encode_semantic(CBORTag(0, datestring))