author | Pulkit Goyal <7895pulkit@gmail.com> |
Fri, 12 Jan 2018 19:23:29 +0530 | |
changeset 3390 | b3dbba6e34c9 |
child 4714 | c51fc0ae7a7e |
permissions | -rw-r--r-- |
3390
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1 |
#!python |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
2 |
# -*- Python -*- |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
3 |
# |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
4 |
# Copyright 2014-2015 Brian Olson |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
5 |
# |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
6 |
# Licensed under the Apache License, Version 2.0 (the "License"); |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
7 |
# you may not use this file except in compliance with the License. |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
8 |
# You may obtain a copy of the License at |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
9 |
# |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
10 |
# http://www.apache.org/licenses/LICENSE-2.0 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
11 |
# |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
12 |
# Unless required by applicable law or agreed to in writing, software |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
13 |
# distributed under the License is distributed on an "AS IS" BASIS, |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
14 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
15 |
# See the License for the specific language governing permissions and |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
16 |
# limitations under the License. |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
17 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
18 |
import datetime |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
19 |
import re |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
20 |
import struct |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
21 |
import sys |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
22 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
23 |
_IS_PY3 = sys.version_info[0] >= 3 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
24 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
25 |
if _IS_PY3: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
26 |
from io import BytesIO as StringIO |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
27 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
28 |
try: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
29 |
from cStringIO import StringIO |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
30 |
except: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
31 |
from StringIO import StringIO |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
32 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
33 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
34 |
CBOR_TYPE_MASK = 0xE0 # top 3 bits |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
35 |
CBOR_INFO_BITS = 0x1F # low 5 bits |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
36 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
37 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
38 |
CBOR_UINT = 0x00 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
39 |
CBOR_NEGINT = 0x20 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
40 |
CBOR_BYTES = 0x40 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
41 |
CBOR_TEXT = 0x60 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
42 |
CBOR_ARRAY = 0x80 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
43 |
CBOR_MAP = 0xA0 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
44 |
CBOR_TAG = 0xC0 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
45 |
CBOR_7 = 0xE0 # float and other types |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
46 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
47 |
CBOR_UINT8_FOLLOWS = 24 # 0x18 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
48 |
CBOR_UINT16_FOLLOWS = 25 # 0x19 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
49 |
CBOR_UINT32_FOLLOWS = 26 # 0x1a |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
50 |
CBOR_UINT64_FOLLOWS = 27 # 0x1b |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
51 |
CBOR_VAR_FOLLOWS = 31 # 0x1f |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
52 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
53 |
CBOR_BREAK = 0xFF |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
54 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
55 |
CBOR_FALSE = (CBOR_7 | 20) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
56 |
CBOR_TRUE = (CBOR_7 | 21) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
57 |
CBOR_NULL = (CBOR_7 | 22) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
58 |
CBOR_UNDEFINED = (CBOR_7 | 23) # js 'undefined' value |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
59 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
60 |
CBOR_FLOAT16 = (CBOR_7 | 25) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
61 |
CBOR_FLOAT32 = (CBOR_7 | 26) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
62 |
CBOR_FLOAT64 = (CBOR_7 | 27) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
63 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
64 |
CBOR_TAG_DATE_STRING = 0 # RFC3339 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
65 |
CBOR_TAG_DATE_ARRAY = 1 # any number type follows, seconds since 1970-01-01T00:00:00 UTC |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
66 |
CBOR_TAG_BIGNUM = 2 # big endian byte string follows |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
67 |
CBOR_TAG_NEGBIGNUM = 3 # big endian byte string follows |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
68 |
CBOR_TAG_DECIMAL = 4 # [ 10^x exponent, number ] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
69 |
CBOR_TAG_BIGFLOAT = 5 # [ 2^x exponent, number ] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
70 |
CBOR_TAG_BASE64URL = 21 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
71 |
CBOR_TAG_BASE64 = 22 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
72 |
CBOR_TAG_BASE16 = 23 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
73 |
CBOR_TAG_CBOR = 24 # following byte string is embedded CBOR data |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
74 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
75 |
CBOR_TAG_URI = 32 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
76 |
CBOR_TAG_BASE64URL = 33 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
77 |
CBOR_TAG_BASE64 = 34 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
78 |
CBOR_TAG_REGEX = 35 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
79 |
CBOR_TAG_MIME = 36 # following text is MIME message, headers, separators and all |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
80 |
CBOR_TAG_CBOR_FILEHEADER = 55799 # can open a file with 0xd9d9f7 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
81 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
82 |
_CBOR_TAG_BIGNUM_BYTES = struct.pack('B', CBOR_TAG | CBOR_TAG_BIGNUM) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
83 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
84 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
85 |
def dumps_int(val): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
86 |
"return bytes representing int val in CBOR" |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
87 |
if val >= 0: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
88 |
# CBOR_UINT is 0, so I'm lazy/efficient about not OR-ing it in. |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
89 |
if val <= 23: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
90 |
return struct.pack('B', val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
91 |
if val <= 0x0ff: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
92 |
return struct.pack('BB', CBOR_UINT8_FOLLOWS, val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
93 |
if val <= 0x0ffff: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
94 |
return struct.pack('!BH', CBOR_UINT16_FOLLOWS, val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
95 |
if val <= 0x0ffffffff: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
96 |
return struct.pack('!BI', CBOR_UINT32_FOLLOWS, val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
97 |
if val <= 0x0ffffffffffffffff: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
98 |
return struct.pack('!BQ', CBOR_UINT64_FOLLOWS, val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
99 |
outb = _dumps_bignum_to_bytearray(val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
100 |
return _CBOR_TAG_BIGNUM_BYTES + _encode_type_num(CBOR_BYTES, len(outb)) + outb |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
101 |
val = -1 - val |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
102 |
return _encode_type_num(CBOR_NEGINT, val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
103 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
104 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
105 |
if _IS_PY3: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
106 |
def _dumps_bignum_to_bytearray(val): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
107 |
out = [] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
108 |
while val > 0: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
109 |
out.insert(0, val & 0x0ff) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
110 |
val = val >> 8 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
111 |
return bytes(out) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
112 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
113 |
def _dumps_bignum_to_bytearray(val): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
114 |
out = [] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
115 |
while val > 0: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
116 |
out.insert(0, chr(val & 0x0ff)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
117 |
val = val >> 8 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
118 |
return b''.join(out) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
119 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
120 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
121 |
def dumps_float(val): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
122 |
return struct.pack("!Bd", CBOR_FLOAT64, val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
123 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
124 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
125 |
_CBOR_TAG_NEGBIGNUM_BYTES = struct.pack('B', CBOR_TAG | CBOR_TAG_NEGBIGNUM) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
126 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
127 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
128 |
def _encode_type_num(cbor_type, val): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
129 |
"""For some CBOR primary type [0..7] and an auxiliary unsigned number, return CBOR encoded bytes""" |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
130 |
assert val >= 0 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
131 |
if val <= 23: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
132 |
return struct.pack('B', cbor_type | val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
133 |
if val <= 0x0ff: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
134 |
return struct.pack('BB', cbor_type | CBOR_UINT8_FOLLOWS, val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
135 |
if val <= 0x0ffff: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
136 |
return struct.pack('!BH', cbor_type | CBOR_UINT16_FOLLOWS, val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
137 |
if val <= 0x0ffffffff: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
138 |
return struct.pack('!BI', cbor_type | CBOR_UINT32_FOLLOWS, val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
139 |
if (((cbor_type == CBOR_NEGINT) and (val <= 0x07fffffffffffffff)) or |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
140 |
((cbor_type != CBOR_NEGINT) and (val <= 0x0ffffffffffffffff))): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
141 |
return struct.pack('!BQ', cbor_type | CBOR_UINT64_FOLLOWS, val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
142 |
if cbor_type != CBOR_NEGINT: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
143 |
raise Exception("value too big for CBOR unsigned number: {0!r}".format(val)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
144 |
outb = _dumps_bignum_to_bytearray(val) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
145 |
return _CBOR_TAG_NEGBIGNUM_BYTES + _encode_type_num(CBOR_BYTES, len(outb)) + outb |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
146 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
147 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
148 |
if _IS_PY3: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
149 |
def _is_unicode(val): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
150 |
return isinstance(val, str) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
151 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
152 |
def _is_unicode(val): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
153 |
return isinstance(val, unicode) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
154 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
155 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
156 |
def dumps_string(val, is_text=None, is_bytes=None): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
157 |
if _is_unicode(val): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
158 |
val = val.encode('utf8') |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
159 |
is_text = True |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
160 |
is_bytes = False |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
161 |
if (is_bytes) or not (is_text == True): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
162 |
return _encode_type_num(CBOR_BYTES, len(val)) + val |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
163 |
return _encode_type_num(CBOR_TEXT, len(val)) + val |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
164 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
165 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
166 |
def dumps_array(arr, sort_keys=False): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
167 |
head = _encode_type_num(CBOR_ARRAY, len(arr)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
168 |
parts = [dumps(x, sort_keys=sort_keys) for x in arr] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
169 |
return head + b''.join(parts) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
170 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
171 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
172 |
if _IS_PY3: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
173 |
def dumps_dict(d, sort_keys=False): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
174 |
head = _encode_type_num(CBOR_MAP, len(d)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
175 |
parts = [head] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
176 |
if sort_keys: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
177 |
for k in sorted(d.keys()): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
178 |
v = d[k] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
179 |
parts.append(dumps(k, sort_keys=sort_keys)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
180 |
parts.append(dumps(v, sort_keys=sort_keys)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
181 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
182 |
for k,v in d.items(): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
183 |
parts.append(dumps(k, sort_keys=sort_keys)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
184 |
parts.append(dumps(v, sort_keys=sort_keys)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
185 |
return b''.join(parts) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
186 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
187 |
def dumps_dict(d, sort_keys=False): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
188 |
head = _encode_type_num(CBOR_MAP, len(d)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
189 |
parts = [head] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
190 |
if sort_keys: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
191 |
for k in sorted(d.iterkeys()): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
192 |
v = d[k] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
193 |
parts.append(dumps(k, sort_keys=sort_keys)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
194 |
parts.append(dumps(v, sort_keys=sort_keys)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
195 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
196 |
for k,v in d.iteritems(): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
197 |
parts.append(dumps(k, sort_keys=sort_keys)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
198 |
parts.append(dumps(v, sort_keys=sort_keys)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
199 |
return b''.join(parts) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
200 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
201 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
202 |
def dumps_bool(b): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
203 |
if b: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
204 |
return struct.pack('B', CBOR_TRUE) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
205 |
return struct.pack('B', CBOR_FALSE) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
206 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
207 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
208 |
def dumps_tag(t, sort_keys=False): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
209 |
return _encode_type_num(CBOR_TAG, t.tag) + dumps(t.value, sort_keys=sort_keys) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
210 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
211 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
212 |
if _IS_PY3: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
213 |
def _is_stringish(x): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
214 |
return isinstance(x, (str, bytes)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
215 |
def _is_intish(x): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
216 |
return isinstance(x, int) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
217 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
218 |
def _is_stringish(x): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
219 |
return isinstance(x, (str, basestring, bytes, unicode)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
220 |
def _is_intish(x): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
221 |
return isinstance(x, (int, long)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
222 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
223 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
224 |
def dumps(ob, sort_keys=False): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
225 |
if ob is None: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
226 |
return struct.pack('B', CBOR_NULL) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
227 |
if isinstance(ob, bool): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
228 |
return dumps_bool(ob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
229 |
if _is_stringish(ob): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
230 |
return dumps_string(ob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
231 |
if isinstance(ob, (list, tuple)): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
232 |
return dumps_array(ob, sort_keys=sort_keys) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
233 |
# TODO: accept other enumerables and emit a variable length array |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
234 |
if isinstance(ob, dict): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
235 |
return dumps_dict(ob, sort_keys=sort_keys) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
236 |
if isinstance(ob, float): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
237 |
return dumps_float(ob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
238 |
if _is_intish(ob): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
239 |
return dumps_int(ob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
240 |
if isinstance(ob, Tag): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
241 |
return dumps_tag(ob, sort_keys=sort_keys) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
242 |
raise Exception("don't know how to cbor serialize object of type %s", type(ob)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
243 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
244 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
245 |
# same basic signature as json.dump, but with no options (yet) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
246 |
def dump(obj, fp, sort_keys=False): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
247 |
""" |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
248 |
obj: Python object to serialize |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
249 |
fp: file-like object capable of .write(bytes) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
250 |
""" |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
251 |
# this is kinda lame, but probably not inefficient for non-huge objects |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
252 |
# TODO: .write() to fp as we go as each inner object is serialized |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
253 |
blob = dumps(obj, sort_keys=sort_keys) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
254 |
fp.write(blob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
255 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
256 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
257 |
class Tag(object): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
258 |
def __init__(self, tag=None, value=None): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
259 |
self.tag = tag |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
260 |
self.value = value |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
261 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
262 |
def __repr__(self): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
263 |
return "Tag({0!r}, {1!r})".format(self.tag, self.value) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
264 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
265 |
def __eq__(self, other): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
266 |
if not isinstance(other, Tag): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
267 |
return False |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
268 |
return (self.tag == other.tag) and (self.value == other.value) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
269 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
270 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
271 |
def loads(data): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
272 |
""" |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
273 |
Parse CBOR bytes and return Python objects. |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
274 |
""" |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
275 |
if data is None: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
276 |
raise ValueError("got None for buffer to decode in loads") |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
277 |
fp = StringIO(data) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
278 |
return _loads(fp)[0] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
279 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
280 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
281 |
def load(fp): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
282 |
""" |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
283 |
Parse and return object from fp, a file-like object supporting .read(n) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
284 |
""" |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
285 |
return _loads(fp)[0] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
286 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
287 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
288 |
_MAX_DEPTH = 100 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
289 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
290 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
291 |
def _tag_aux(fp, tb): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
292 |
bytes_read = 1 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
293 |
tag = tb & CBOR_TYPE_MASK |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
294 |
tag_aux = tb & CBOR_INFO_BITS |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
295 |
if tag_aux <= 23: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
296 |
aux = tag_aux |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
297 |
elif tag_aux == CBOR_UINT8_FOLLOWS: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
298 |
data = fp.read(1) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
299 |
aux = struct.unpack_from("!B", data, 0)[0] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
300 |
bytes_read += 1 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
301 |
elif tag_aux == CBOR_UINT16_FOLLOWS: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
302 |
data = fp.read(2) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
303 |
aux = struct.unpack_from("!H", data, 0)[0] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
304 |
bytes_read += 2 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
305 |
elif tag_aux == CBOR_UINT32_FOLLOWS: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
306 |
data = fp.read(4) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
307 |
aux = struct.unpack_from("!I", data, 0)[0] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
308 |
bytes_read += 4 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
309 |
elif tag_aux == CBOR_UINT64_FOLLOWS: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
310 |
data = fp.read(8) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
311 |
aux = struct.unpack_from("!Q", data, 0)[0] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
312 |
bytes_read += 8 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
313 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
314 |
assert tag_aux == CBOR_VAR_FOLLOWS, "bogus tag {0:02x}".format(tb) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
315 |
aux = None |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
316 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
317 |
return tag, tag_aux, aux, bytes_read |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
318 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
319 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
320 |
def _read_byte(fp): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
321 |
tb = fp.read(1) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
322 |
if len(tb) == 0: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
323 |
# I guess not all file-like objects do this |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
324 |
raise EOFError() |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
325 |
return ord(tb) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
326 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
327 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
328 |
def _loads_var_array(fp, limit, depth, returntags, bytes_read): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
329 |
ob = [] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
330 |
tb = _read_byte(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
331 |
while tb != CBOR_BREAK: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
332 |
(subob, sub_len) = _loads_tb(fp, tb, limit, depth, returntags) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
333 |
bytes_read += 1 + sub_len |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
334 |
ob.append(subob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
335 |
tb = _read_byte(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
336 |
return (ob, bytes_read + 1) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
337 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
338 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
339 |
def _loads_var_map(fp, limit, depth, returntags, bytes_read): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
340 |
ob = {} |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
341 |
tb = _read_byte(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
342 |
while tb != CBOR_BREAK: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
343 |
(subk, sub_len) = _loads_tb(fp, tb, limit, depth, returntags) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
344 |
bytes_read += 1 + sub_len |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
345 |
(subv, sub_len) = _loads(fp, limit, depth, returntags) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
346 |
bytes_read += sub_len |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
347 |
ob[subk] = subv |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
348 |
tb = _read_byte(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
349 |
return (ob, bytes_read + 1) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
350 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
351 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
352 |
if _IS_PY3: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
353 |
def _loads_array(fp, limit, depth, returntags, aux, bytes_read): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
354 |
ob = [] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
355 |
for i in range(aux): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
356 |
subob, subpos = _loads(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
357 |
bytes_read += subpos |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
358 |
ob.append(subob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
359 |
return ob, bytes_read |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
360 |
def _loads_map(fp, limit, depth, returntags, aux, bytes_read): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
361 |
ob = {} |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
362 |
for i in range(aux): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
363 |
subk, subpos = _loads(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
364 |
bytes_read += subpos |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
365 |
subv, subpos = _loads(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
366 |
bytes_read += subpos |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
367 |
ob[subk] = subv |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
368 |
return ob, bytes_read |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
369 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
370 |
def _loads_array(fp, limit, depth, returntags, aux, bytes_read): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
371 |
ob = [] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
372 |
for i in xrange(aux): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
373 |
subob, subpos = _loads(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
374 |
bytes_read += subpos |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
375 |
ob.append(subob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
376 |
return ob, bytes_read |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
377 |
def _loads_map(fp, limit, depth, returntags, aux, bytes_read): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
378 |
ob = {} |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
379 |
for i in xrange(aux): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
380 |
subk, subpos = _loads(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
381 |
bytes_read += subpos |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
382 |
subv, subpos = _loads(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
383 |
bytes_read += subpos |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
384 |
ob[subk] = subv |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
385 |
return ob, bytes_read |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
386 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
387 |
def _loads(fp, limit=None, depth=0, returntags=False): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
388 |
"return (object, bytes read)" |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
389 |
if depth > _MAX_DEPTH: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
390 |
raise Exception("hit CBOR loads recursion depth limit") |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
391 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
392 |
tb = _read_byte(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
393 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
394 |
return _loads_tb(fp, tb, limit, depth, returntags) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
395 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
396 |
def _loads_tb(fp, tb, limit=None, depth=0, returntags=False): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
397 |
# Some special cases of CBOR_7 best handled by special struct.unpack logic here |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
398 |
if tb == CBOR_FLOAT16: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
399 |
data = fp.read(2) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
400 |
hibyte, lowbyte = struct.unpack_from("BB", data, 0) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
401 |
exp = (hibyte >> 2) & 0x1F |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
402 |
mant = ((hibyte & 0x03) << 8) | lowbyte |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
403 |
if exp == 0: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
404 |
val = mant * (2.0 ** -24) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
405 |
elif exp == 31: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
406 |
if mant == 0: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
407 |
val = float('Inf') |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
408 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
409 |
val = float('NaN') |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
410 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
411 |
val = (mant + 1024.0) * (2 ** (exp - 25)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
412 |
if hibyte & 0x80: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
413 |
val = -1.0 * val |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
414 |
return (val, 3) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
415 |
elif tb == CBOR_FLOAT32: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
416 |
data = fp.read(4) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
417 |
pf = struct.unpack_from("!f", data, 0) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
418 |
return (pf[0], 5) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
419 |
elif tb == CBOR_FLOAT64: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
420 |
data = fp.read(8) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
421 |
pf = struct.unpack_from("!d", data, 0) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
422 |
return (pf[0], 9) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
423 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
424 |
tag, tag_aux, aux, bytes_read = _tag_aux(fp, tb) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
425 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
426 |
if tag == CBOR_UINT: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
427 |
return (aux, bytes_read) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
428 |
elif tag == CBOR_NEGINT: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
429 |
return (-1 - aux, bytes_read) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
430 |
elif tag == CBOR_BYTES: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
431 |
ob, subpos = loads_bytes(fp, aux) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
432 |
return (ob, bytes_read + subpos) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
433 |
elif tag == CBOR_TEXT: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
434 |
raw, subpos = loads_bytes(fp, aux, btag=CBOR_TEXT) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
435 |
ob = raw.decode('utf8') |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
436 |
return (ob, bytes_read + subpos) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
437 |
elif tag == CBOR_ARRAY: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
438 |
if aux is None: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
439 |
return _loads_var_array(fp, limit, depth, returntags, bytes_read) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
440 |
return _loads_array(fp, limit, depth, returntags, aux, bytes_read) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
441 |
elif tag == CBOR_MAP: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
442 |
if aux is None: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
443 |
return _loads_var_map(fp, limit, depth, returntags, bytes_read) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
444 |
return _loads_map(fp, limit, depth, returntags, aux, bytes_read) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
445 |
elif tag == CBOR_TAG: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
446 |
ob, subpos = _loads(fp) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
447 |
bytes_read += subpos |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
448 |
if returntags: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
449 |
# Don't interpret the tag, return it and the tagged object. |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
450 |
ob = Tag(aux, ob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
451 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
452 |
# attempt to interpet the tag and the value into a Python object. |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
453 |
ob = tagify(ob, aux) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
454 |
return ob, bytes_read |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
455 |
elif tag == CBOR_7: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
456 |
if tb == CBOR_TRUE: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
457 |
return (True, bytes_read) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
458 |
if tb == CBOR_FALSE: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
459 |
return (False, bytes_read) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
460 |
if tb == CBOR_NULL: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
461 |
return (None, bytes_read) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
462 |
if tb == CBOR_UNDEFINED: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
463 |
return (None, bytes_read) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
464 |
raise ValueError("unknown cbor tag 7 byte: {:02x}".format(tb)) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
465 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
466 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
467 |
def loads_bytes(fp, aux, btag=CBOR_BYTES): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
468 |
# TODO: limit to some maximum number of chunks and some maximum total bytes |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
469 |
if aux is not None: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
470 |
# simple case |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
471 |
ob = fp.read(aux) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
472 |
return (ob, aux) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
473 |
# read chunks of bytes |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
474 |
chunklist = [] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
475 |
total_bytes_read = 0 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
476 |
while True: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
477 |
tb = fp.read(1)[0] |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
478 |
if not _IS_PY3: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
479 |
tb = ord(tb) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
480 |
if tb == CBOR_BREAK: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
481 |
total_bytes_read += 1 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
482 |
break |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
483 |
tag, tag_aux, aux, bytes_read = _tag_aux(fp, tb) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
484 |
assert tag == btag, 'variable length value contains unexpected component' |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
485 |
ob = fp.read(aux) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
486 |
chunklist.append(ob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
487 |
total_bytes_read += bytes_read + aux |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
488 |
return (b''.join(chunklist), total_bytes_read) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
489 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
490 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
491 |
if _IS_PY3: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
492 |
def _bytes_to_biguint(bs): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
493 |
out = 0 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
494 |
for ch in bs: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
495 |
out = out << 8 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
496 |
out = out | ch |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
497 |
return out |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
498 |
else: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
499 |
def _bytes_to_biguint(bs): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
500 |
out = 0 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
501 |
for ch in bs: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
502 |
out = out << 8 |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
503 |
out = out | ord(ch) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
504 |
return out |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
505 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
506 |
|
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
507 |
def tagify(ob, aux): |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
508 |
# TODO: make this extensible? |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
509 |
# cbor.register_tag_handler(tagnumber, tag_handler) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
510 |
# where tag_handler takes (tagnumber, tagged_object) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
511 |
if aux == CBOR_TAG_DATE_STRING: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
512 |
# TODO: parse RFC3339 date string |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
513 |
pass |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
514 |
if aux == CBOR_TAG_DATE_ARRAY: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
515 |
return datetime.datetime.utcfromtimestamp(ob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
516 |
if aux == CBOR_TAG_BIGNUM: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
517 |
return _bytes_to_biguint(ob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
518 |
if aux == CBOR_TAG_NEGBIGNUM: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
519 |
return -1 - _bytes_to_biguint(ob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
520 |
if aux == CBOR_TAG_REGEX: |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
521 |
# Is this actually a good idea? Should we just return the tag and the raw value to the user somehow? |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
522 |
return re.compile(ob) |
b3dbba6e34c9
evolve: start vendoring third party package cbor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
523 |
return Tag(aux, ob) |