Exemplo n.º 1
0
 def encode_int(self, value, permit_bignum=True):
     '''Encode an integer as major value 0 or 1 if possible, otherwise as a tagged bignum if
     permit_bignum is True.
     '''
     try:
         if value >= 0:
             return pack_cbor_length(value, 0x00)
         else:
             return pack_cbor_length(-1 - value, 0x20)
     except OverflowError:
         pass
     if permit_bignum:
         return self.encode_bignum(value)
     raise EncodingError(
         f'overflow encoding {value:,d} as a standard integer')
Exemplo n.º 2
0
 def encode_sorted_dict(self, kv_pairs, sort_method):
     encode_item = self.encode_item
     pairs_gen = ((encode_item(key), value) for key, value in kv_pairs)
     length = pack_cbor_length(len(kv_pairs), 0xa0)
     return length + bjoin(
         encoded_key + encode_item(value)
         for encoded_key, value in sorted_pairs(pairs_gen, sort_method))
Exemplo n.º 3
0
 def encode_tag(self, value):
     return pack_cbor_length(value, 0xc0)
Exemplo n.º 4
0
 def encode_sorted_list(self, value):
     length = pack_cbor_length(len(value), 0x80)
     encode_item = self.encode_item
     encoded_items_gen = (encode_item(item) for item in value)
     return length + bjoin(sorted_items(encoded_items_gen,
                                        self.sort_method))
Exemplo n.º 5
0
 def _make_list(self, length, encoded_items_gen):
     return pack_cbor_length(length, 0x80) + bjoin(encoded_items_gen)
Exemplo n.º 6
0
 def encode_text_string(self, value):
     value_utf8 = value.encode()
     return pack_cbor_length(len(value_utf8), 0x60) + value_utf8
Exemplo n.º 7
0
 def encode_byte_string(self, value):
     return pack_cbor_length(len(value), 0x40) + value
Exemplo n.º 8
0
 def __encode_cbor__(self, encoder):
     return pack_cbor_length(self.tag, 0xc0) + encoder.encode_item(
         self.value)