4
4
import struct
5
5
6
6
7
- PY2 = sys .version_info [0 ] == 2
8
- if PY2 :
9
- int_types = (int , long )
10
-
11
- def dict_iteritems (d ):
12
- return d .iteritems ()
13
-
14
- else :
15
- int_types = int
16
- unicode = str
17
- xrange = range
18
-
19
- def dict_iteritems (d ):
20
- return d .items ()
21
-
22
-
23
7
if sys .version_info < (3 , 5 ):
24
8
# Ugly hack...
25
9
RecursionError = RuntimeError
@@ -134,15 +118,6 @@ def unpackb(packed, **kwargs):
134
118
return ret
135
119
136
120
137
- if sys .version_info < (2 , 7 , 6 ):
138
-
139
- def _unpack_from (f , b , o = 0 ):
140
- """Explicit type cast for legacy struct.unpack_from"""
141
- return struct .unpack_from (f , bytes (b ), o )
142
-
143
- else :
144
- _unpack_from = struct .unpack_from
145
-
146
121
_NO_FORMAT_USED = ""
147
122
_MSGPACK_HEADERS = {
148
123
0xC4 : (1 , _NO_FORMAT_USED , TYPE_BIN ),
@@ -202,7 +177,7 @@ class Unpacker(object):
202
177
0 - Timestamp
203
178
1 - float (Seconds from the EPOCH)
204
179
2 - int (Nanoseconds from the EPOCH)
205
- 3 - datetime.datetime (UTC). Python 2 is not supported.
180
+ 3 - datetime.datetime (UTC).
206
181
207
182
:param bool strict_map_key:
208
183
If true (default), only str or bytes are accepted for map (dict) keys.
@@ -477,7 +452,7 @@ def _read_header(self):
477
452
size , fmt , typ = _MSGPACK_HEADERS [b ]
478
453
self ._reserve (size )
479
454
if len (fmt ) > 0 :
480
- n = _unpack_from (fmt , self ._buffer , self ._buff_i )[0 ]
455
+ n = struct . unpack_from (fmt , self ._buffer , self ._buff_i )[0 ]
481
456
else :
482
457
n = self ._buffer [self ._buff_i ]
483
458
self ._buff_i += size
@@ -487,7 +462,7 @@ def _read_header(self):
487
462
elif 0xC7 <= b <= 0xC9 :
488
463
size , fmt , typ = _MSGPACK_HEADERS [b ]
489
464
self ._reserve (size )
490
- L , n = _unpack_from (fmt , self ._buffer , self ._buff_i )
465
+ L , n = struct . unpack_from (fmt , self ._buffer , self ._buff_i )
491
466
self ._buff_i += size
492
467
if L > self ._max_ext_len :
493
468
raise ValueError ("%s exceeds max_ext_len(%s)" % (L , self ._max_ext_len ))
@@ -496,7 +471,7 @@ def _read_header(self):
496
471
size , fmt = _MSGPACK_HEADERS [b ]
497
472
self ._reserve (size )
498
473
if len (fmt ) > 0 :
499
- obj = _unpack_from (fmt , self ._buffer , self ._buff_i )[0 ]
474
+ obj = struct . unpack_from (fmt , self ._buffer , self ._buff_i )[0 ]
500
475
else :
501
476
obj = self ._buffer [self ._buff_i ]
502
477
self ._buff_i += size
@@ -507,13 +482,13 @@ def _read_header(self):
507
482
"%s exceeds max_ext_len(%s)" % (size , self ._max_ext_len )
508
483
)
509
484
self ._reserve (size + 1 )
510
- n , obj = _unpack_from (fmt , self ._buffer , self ._buff_i )
485
+ n , obj = struct . unpack_from (fmt , self ._buffer , self ._buff_i )
511
486
self ._buff_i += size + 1
512
487
elif 0xD9 <= b <= 0xDB :
513
488
size , fmt , typ = _MSGPACK_HEADERS [b ]
514
489
self ._reserve (size )
515
490
if len (fmt ) > 0 :
516
- (n ,) = _unpack_from (fmt , self ._buffer , self ._buff_i )
491
+ (n ,) = struct . unpack_from (fmt , self ._buffer , self ._buff_i )
517
492
else :
518
493
n = self ._buffer [self ._buff_i ]
519
494
self ._buff_i += size
@@ -523,7 +498,7 @@ def _read_header(self):
523
498
elif 0xDC <= b <= 0xDD :
524
499
size , fmt , typ = _MSGPACK_HEADERS [b ]
525
500
self ._reserve (size )
526
- (n ,) = _unpack_from (fmt , self ._buffer , self ._buff_i )
501
+ (n ,) = struct . unpack_from (fmt , self ._buffer , self ._buff_i )
527
502
self ._buff_i += size
528
503
if n > self ._max_array_len :
529
504
raise ValueError (
@@ -532,7 +507,7 @@ def _read_header(self):
532
507
elif 0xDE <= b <= 0xDF :
533
508
size , fmt , typ = _MSGPACK_HEADERS [b ]
534
509
self ._reserve (size )
535
- (n ,) = _unpack_from (fmt , self ._buffer , self ._buff_i )
510
+ (n ,) = struct . unpack_from (fmt , self ._buffer , self ._buff_i )
536
511
self ._buff_i += size
537
512
if n > self ._max_map_len :
538
513
raise ValueError ("%s exceeds max_map_len(%s)" % (n , self ._max_map_len ))
@@ -554,38 +529,38 @@ def _unpack(self, execute=EX_CONSTRUCT):
554
529
# TODO should we eliminate the recursion?
555
530
if typ == TYPE_ARRAY :
556
531
if execute == EX_SKIP :
557
- for i in xrange (n ):
532
+ for i in range (n ):
558
533
# TODO check whether we need to call `list_hook`
559
534
self ._unpack (EX_SKIP )
560
535
return
561
536
ret = newlist_hint (n )
562
- for i in xrange (n ):
537
+ for i in range (n ):
563
538
ret .append (self ._unpack (EX_CONSTRUCT ))
564
539
if self ._list_hook is not None :
565
540
ret = self ._list_hook (ret )
566
541
# TODO is the interaction between `list_hook` and `use_list` ok?
567
542
return ret if self ._use_list else tuple (ret )
568
543
if typ == TYPE_MAP :
569
544
if execute == EX_SKIP :
570
- for i in xrange (n ):
545
+ for i in range (n ):
571
546
# TODO check whether we need to call hooks
572
547
self ._unpack (EX_SKIP )
573
548
self ._unpack (EX_SKIP )
574
549
return
575
550
if self ._object_pairs_hook is not None :
576
551
ret = self ._object_pairs_hook (
577
552
(self ._unpack (EX_CONSTRUCT ), self ._unpack (EX_CONSTRUCT ))
578
- for _ in xrange (n )
553
+ for _ in range (n )
579
554
)
580
555
else :
581
556
ret = {}
582
- for _ in xrange (n ):
557
+ for _ in range (n ):
583
558
key = self ._unpack (EX_CONSTRUCT )
584
- if self ._strict_map_key and type (key ) not in (unicode , bytes ):
559
+ if self ._strict_map_key and type (key ) not in (str , bytes ):
585
560
raise ValueError (
586
561
"%s is not allowed for map key" % str (type (key ))
587
562
)
588
- if not PY2 and type (key ) is str :
563
+ if type (key ) is str :
589
564
key = sys .intern (key )
590
565
ret [key ] = self ._unpack (EX_CONSTRUCT )
591
566
if self ._object_hook is not None :
@@ -698,7 +673,6 @@ class Packer(object):
698
673
If set to true, datetime with tzinfo is packed into Timestamp type.
699
674
Note that the tzinfo is stripped in the timestamp.
700
675
You can get UTC datetime with `timestamp=3` option of the Unpacker.
701
- (Python 2 is not supported).
702
676
703
677
:param str unicode_errors:
704
678
The error handler for encoding unicode. (default: 'strict')
@@ -743,8 +717,6 @@ def __init__(
743
717
self ._autoreset = autoreset
744
718
self ._use_bin_type = use_bin_type
745
719
self ._buffer = StringIO ()
746
- if PY2 and datetime :
747
- raise ValueError ("datetime is not supported in Python 2" )
748
720
self ._datetime = bool (datetime )
749
721
self ._unicode_errors = unicode_errors or "strict"
750
722
if default is not None :
@@ -774,7 +746,7 @@ def _pack(
774
746
if obj :
775
747
return self ._buffer .write (b"\xc3 " )
776
748
return self ._buffer .write (b"\xc2 " )
777
- if check (obj , int_types ):
749
+ if check (obj , int ):
778
750
if 0 <= obj < 0x80 :
779
751
return self ._buffer .write (struct .pack ("B" , obj ))
780
752
if - 0x20 <= obj < 0 :
@@ -806,7 +778,7 @@ def _pack(
806
778
raise ValueError ("%s is too large" % type (obj ).__name__ )
807
779
self ._pack_bin_header (n )
808
780
return self ._buffer .write (obj )
809
- if check (obj , unicode ):
781
+ if check (obj , str ):
810
782
obj = obj .encode ("utf-8" , self ._unicode_errors )
811
783
n = len (obj )
812
784
if n >= 2 ** 32 :
@@ -855,13 +827,11 @@ def _pack(
855
827
if check (obj , list_types ):
856
828
n = len (obj )
857
829
self ._pack_array_header (n )
858
- for i in xrange (n ):
830
+ for i in range (n ):
859
831
self ._pack (obj [i ], nest_limit - 1 )
860
832
return
861
833
if check (obj , dict ):
862
- return self ._pack_map_pairs (
863
- len (obj ), dict_iteritems (obj ), nest_limit - 1
864
- )
834
+ return self ._pack_map_pairs (len (obj ), obj .items (), nest_limit - 1 )
865
835
866
836
if self ._datetime and check (obj , _DateTime ) and obj .tzinfo is not None :
867
837
obj = Timestamp .from_datetime (obj )
@@ -1004,7 +974,7 @@ def reset(self):
1004
974
1005
975
def getbuffer (self ):
1006
976
"""Return view of internal buffer."""
1007
- if USING_STRINGBUILDER or PY2 :
977
+ if USING_STRINGBUILDER :
1008
978
return memoryview (self .bytes ())
1009
979
else :
1010
980
return self ._buffer .getbuffer ()
0 commit comments