44import struct
55
66
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-
237if sys .version_info < (3 , 5 ):
248 # Ugly hack...
259 RecursionError = RuntimeError
@@ -134,15 +118,6 @@ def unpackb(packed, **kwargs):
134118 return ret
135119
136120
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-
146121_NO_FORMAT_USED = ""
147122_MSGPACK_HEADERS = {
148123 0xC4 : (1 , _NO_FORMAT_USED , TYPE_BIN ),
@@ -202,7 +177,7 @@ class Unpacker(object):
202177 0 - Timestamp
203178 1 - float (Seconds from the EPOCH)
204179 2 - int (Nanoseconds from the EPOCH)
205- 3 - datetime.datetime (UTC). Python 2 is not supported.
180+ 3 - datetime.datetime (UTC).
206181
207182 :param bool strict_map_key:
208183 If true (default), only str or bytes are accepted for map (dict) keys.
@@ -477,7 +452,7 @@ def _read_header(self):
477452 size , fmt , typ = _MSGPACK_HEADERS [b ]
478453 self ._reserve (size )
479454 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 ]
481456 else :
482457 n = self ._buffer [self ._buff_i ]
483458 self ._buff_i += size
@@ -487,7 +462,7 @@ def _read_header(self):
487462 elif 0xC7 <= b <= 0xC9 :
488463 size , fmt , typ = _MSGPACK_HEADERS [b ]
489464 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 )
491466 self ._buff_i += size
492467 if L > self ._max_ext_len :
493468 raise ValueError ("%s exceeds max_ext_len(%s)" % (L , self ._max_ext_len ))
@@ -496,7 +471,7 @@ def _read_header(self):
496471 size , fmt = _MSGPACK_HEADERS [b ]
497472 self ._reserve (size )
498473 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 ]
500475 else :
501476 obj = self ._buffer [self ._buff_i ]
502477 self ._buff_i += size
@@ -507,13 +482,13 @@ def _read_header(self):
507482 "%s exceeds max_ext_len(%s)" % (size , self ._max_ext_len )
508483 )
509484 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 )
511486 self ._buff_i += size + 1
512487 elif 0xD9 <= b <= 0xDB :
513488 size , fmt , typ = _MSGPACK_HEADERS [b ]
514489 self ._reserve (size )
515490 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 )
517492 else :
518493 n = self ._buffer [self ._buff_i ]
519494 self ._buff_i += size
@@ -523,7 +498,7 @@ def _read_header(self):
523498 elif 0xDC <= b <= 0xDD :
524499 size , fmt , typ = _MSGPACK_HEADERS [b ]
525500 self ._reserve (size )
526- (n ,) = _unpack_from (fmt , self ._buffer , self ._buff_i )
501+ (n ,) = struct . unpack_from (fmt , self ._buffer , self ._buff_i )
527502 self ._buff_i += size
528503 if n > self ._max_array_len :
529504 raise ValueError (
@@ -532,7 +507,7 @@ def _read_header(self):
532507 elif 0xDE <= b <= 0xDF :
533508 size , fmt , typ = _MSGPACK_HEADERS [b ]
534509 self ._reserve (size )
535- (n ,) = _unpack_from (fmt , self ._buffer , self ._buff_i )
510+ (n ,) = struct . unpack_from (fmt , self ._buffer , self ._buff_i )
536511 self ._buff_i += size
537512 if n > self ._max_map_len :
538513 raise ValueError ("%s exceeds max_map_len(%s)" % (n , self ._max_map_len ))
@@ -554,38 +529,38 @@ def _unpack(self, execute=EX_CONSTRUCT):
554529 # TODO should we eliminate the recursion?
555530 if typ == TYPE_ARRAY :
556531 if execute == EX_SKIP :
557- for i in xrange (n ):
532+ for i in range (n ):
558533 # TODO check whether we need to call `list_hook`
559534 self ._unpack (EX_SKIP )
560535 return
561536 ret = newlist_hint (n )
562- for i in xrange (n ):
537+ for i in range (n ):
563538 ret .append (self ._unpack (EX_CONSTRUCT ))
564539 if self ._list_hook is not None :
565540 ret = self ._list_hook (ret )
566541 # TODO is the interaction between `list_hook` and `use_list` ok?
567542 return ret if self ._use_list else tuple (ret )
568543 if typ == TYPE_MAP :
569544 if execute == EX_SKIP :
570- for i in xrange (n ):
545+ for i in range (n ):
571546 # TODO check whether we need to call hooks
572547 self ._unpack (EX_SKIP )
573548 self ._unpack (EX_SKIP )
574549 return
575550 if self ._object_pairs_hook is not None :
576551 ret = self ._object_pairs_hook (
577552 (self ._unpack (EX_CONSTRUCT ), self ._unpack (EX_CONSTRUCT ))
578- for _ in xrange (n )
553+ for _ in range (n )
579554 )
580555 else :
581556 ret = {}
582- for _ in xrange (n ):
557+ for _ in range (n ):
583558 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 ):
585560 raise ValueError (
586561 "%s is not allowed for map key" % str (type (key ))
587562 )
588- if not PY2 and type (key ) is str :
563+ if type (key ) is str :
589564 key = sys .intern (key )
590565 ret [key ] = self ._unpack (EX_CONSTRUCT )
591566 if self ._object_hook is not None :
@@ -698,7 +673,6 @@ class Packer(object):
698673 If set to true, datetime with tzinfo is packed into Timestamp type.
699674 Note that the tzinfo is stripped in the timestamp.
700675 You can get UTC datetime with `timestamp=3` option of the Unpacker.
701- (Python 2 is not supported).
702676
703677 :param str unicode_errors:
704678 The error handler for encoding unicode. (default: 'strict')
@@ -743,8 +717,6 @@ def __init__(
743717 self ._autoreset = autoreset
744718 self ._use_bin_type = use_bin_type
745719 self ._buffer = StringIO ()
746- if PY2 and datetime :
747- raise ValueError ("datetime is not supported in Python 2" )
748720 self ._datetime = bool (datetime )
749721 self ._unicode_errors = unicode_errors or "strict"
750722 if default is not None :
@@ -774,7 +746,7 @@ def _pack(
774746 if obj :
775747 return self ._buffer .write (b"\xc3 " )
776748 return self ._buffer .write (b"\xc2 " )
777- if check (obj , int_types ):
749+ if check (obj , int ):
778750 if 0 <= obj < 0x80 :
779751 return self ._buffer .write (struct .pack ("B" , obj ))
780752 if - 0x20 <= obj < 0 :
@@ -806,7 +778,7 @@ def _pack(
806778 raise ValueError ("%s is too large" % type (obj ).__name__ )
807779 self ._pack_bin_header (n )
808780 return self ._buffer .write (obj )
809- if check (obj , unicode ):
781+ if check (obj , str ):
810782 obj = obj .encode ("utf-8" , self ._unicode_errors )
811783 n = len (obj )
812784 if n >= 2 ** 32 :
@@ -855,13 +827,11 @@ def _pack(
855827 if check (obj , list_types ):
856828 n = len (obj )
857829 self ._pack_array_header (n )
858- for i in xrange (n ):
830+ for i in range (n ):
859831 self ._pack (obj [i ], nest_limit - 1 )
860832 return
861833 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 )
865835
866836 if self ._datetime and check (obj , _DateTime ) and obj .tzinfo is not None :
867837 obj = Timestamp .from_datetime (obj )
@@ -1004,7 +974,7 @@ def reset(self):
1004974
1005975 def getbuffer (self ):
1006976 """Return view of internal buffer."""
1007- if USING_STRINGBUILDER or PY2 :
977+ if USING_STRINGBUILDER :
1008978 return memoryview (self .bytes ())
1009979 else :
1010980 return self ._buffer .getbuffer ()
0 commit comments