Visitar URL original
move _unpack_from to global function. · msgpack/msgpack-python@ea0065f · GitHub
Skip to content

Commit ea0065f

Browse files
committed
move _unpack_from to global function.
1 parent 394b339 commit ea0065f

1 file changed

Lines changed: 32 additions & 30 deletions

File tree

‎msgpack/fallback.py‎

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,13 @@ def unpackb(packed, **kwargs):
126126
return ret
127127

128128

129+
if sys.version < (2, 7, 6):
130+
def _unpack_from(f, b, o=0):
131+
return struct.unpack_from(f, b[:o+2].tobytes(), o)
132+
else:
133+
_unpack_from = struct.unpack_from
134+
135+
129136
class Unpacker(object):
130137
"""Streaming unpacker.
131138
@@ -205,11 +212,6 @@ class Unpacker(object):
205212
for o in unpacker:
206213
process(o)
207214
"""
208-
# Some old pythons don't support `self._unpack_from()` `bytearray`.
209-
_unpack_from = staticmethod(
210-
struct.unpack_from if sys.version_info >= (2, 7, 6)
211-
else lambda f,b,o=0: struct.unpack_from(f, b[:o+2].tobytes(),o)
212-
)
213215

214216
def __init__(self, file_like=None, read_size=0, use_list=True, raw=True,
215217
object_hook=None, object_pairs_hook=None, list_hook=None,
@@ -393,117 +395,117 @@ def _read_header(self, execute=EX_CONSTRUCT):
393395
elif b == 0xc5:
394396
typ = TYPE_BIN
395397
self._reserve(2)
396-
n = self._unpack_from(">H", self._buffer, self._buff_i)[0]
398+
n = _unpack_from(">H", self._buffer, self._buff_i)[0]
397399
self._buff_i += 2
398400
if n > self._max_bin_len:
399401
raise UnpackValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len))
400402
obj = self._read(n)
401403
elif b == 0xc6:
402404
typ = TYPE_BIN
403405
self._reserve(4)
404-
n = self._unpack_from(">I", self._buffer, self._buff_i)[0]
406+
n = _unpack_from(">I", self._buffer, self._buff_i)[0]
405407
self._buff_i += 4
406408
if n > self._max_bin_len:
407409
raise UnpackValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len))
408410
obj = self._read(n)
409411
elif b == 0xc7: # ext 8
410412
typ = TYPE_EXT
411413
self._reserve(2)
412-
L, n = self._unpack_from('Bb', self._buffer, self._buff_i)
414+
L, n = _unpack_from('Bb', self._buffer, self._buff_i)
413415
self._buff_i += 2
414416
if L > self._max_ext_len:
415417
raise UnpackValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len))
416418
obj = self._read(L)
417419
elif b == 0xc8: # ext 16
418420
typ = TYPE_EXT
419421
self._reserve(3)
420-
L, n = self._unpack_from('>Hb', self._buffer, self._buff_i)
422+
L, n = _unpack_from('>Hb', self._buffer, self._buff_i)
421423
self._buff_i += 3
422424
if L > self._max_ext_len:
423425
raise UnpackValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len))
424426
obj = self._read(L)
425427
elif b == 0xc9: # ext 32
426428
typ = TYPE_EXT
427429
self._reserve(5)
428-
L, n = self._unpack_from('>Ib', self._buffer, self._buff_i)
430+
L, n = _unpack_from('>Ib', self._buffer, self._buff_i)
429431
self._buff_i += 5
430432
if L > self._max_ext_len:
431433
raise UnpackValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len))
432434
obj = self._read(L)
433435
elif b == 0xca:
434436
self._reserve(4)
435-
obj = self._unpack_from(">f", self._buffer, self._buff_i)[0]
437+
obj = _unpack_from(">f", self._buffer, self._buff_i)[0]
436438
self._buff_i += 4
437439
elif b == 0xcb:
438440
self._reserve(8)
439-
obj = self._unpack_from(">d", self._buffer, self._buff_i)[0]
441+
obj = _unpack_from(">d", self._buffer, self._buff_i)[0]
440442
self._buff_i += 8
441443
elif b == 0xcc:
442444
self._reserve(1)
443445
obj = self._buffer[self._buff_i]
444446
self._buff_i += 1
445447
elif b == 0xcd:
446448
self._reserve(2)
447-
obj = self._unpack_from(">H", self._buffer, self._buff_i)[0]
449+
obj = _unpack_from(">H", self._buffer, self._buff_i)[0]
448450
self._buff_i += 2
449451
elif b == 0xce:
450452
self._reserve(4)
451-
obj = self._unpack_from(">I", self._buffer, self._buff_i)[0]
453+
obj = _unpack_from(">I", self._buffer, self._buff_i)[0]
452454
self._buff_i += 4
453455
elif b == 0xcf:
454456
self._reserve(8)
455-
obj = self._unpack_from(">Q", self._buffer, self._buff_i)[0]
457+
obj = _unpack_from(">Q", self._buffer, self._buff_i)[0]
456458
self._buff_i += 8
457459
elif b == 0xd0:
458460
self._reserve(1)
459-
obj = self._unpack_from("b", self._buffer, self._buff_i)[0]
461+
obj = _unpack_from("b", self._buffer, self._buff_i)[0]
460462
self._buff_i += 1
461463
elif b == 0xd1:
462464
self._reserve(2)
463-
obj = self._unpack_from(">h", self._buffer, self._buff_i)[0]
465+
obj = _unpack_from(">h", self._buffer, self._buff_i)[0]
464466
self._buff_i += 2
465467
elif b == 0xd2:
466468
self._reserve(4)
467-
obj = self._unpack_from(">i", self._buffer, self._buff_i)[0]
469+
obj = _unpack_from(">i", self._buffer, self._buff_i)[0]
468470
self._buff_i += 4
469471
elif b == 0xd3:
470472
self._reserve(8)
471-
obj = self._unpack_from(">q", self._buffer, self._buff_i)[0]
473+
obj = _unpack_from(">q", self._buffer, self._buff_i)[0]
472474
self._buff_i += 8
473475
elif b == 0xd4: # fixext 1
474476
typ = TYPE_EXT
475477
if self._max_ext_len < 1:
476478
raise UnpackValueError("%s exceeds max_ext_len(%s)" % (1, self._max_ext_len))
477479
self._reserve(2)
478-
n, obj = self._unpack_from("b1s", self._buffer, self._buff_i)
480+
n, obj = _unpack_from("b1s", self._buffer, self._buff_i)
479481
self._buff_i += 2
480482
elif b == 0xd5: # fixext 2
481483
typ = TYPE_EXT
482484
if self._max_ext_len < 2:
483485
raise UnpackValueError("%s exceeds max_ext_len(%s)" % (2, self._max_ext_len))
484486
self._reserve(3)
485-
n, obj = self._unpack_from("b2s", self._buffer, self._buff_i)
487+
n, obj = _unpack_from("b2s", self._buffer, self._buff_i)
486488
self._buff_i += 3
487489
elif b == 0xd6: # fixext 4
488490
typ = TYPE_EXT
489491
if self._max_ext_len < 4:
490492
raise UnpackValueError("%s exceeds max_ext_len(%s)" % (4, self._max_ext_len))
491493
self._reserve(5)
492-
n, obj = self._unpack_from("b4s", self._buffer, self._buff_i)
494+
n, obj = _unpack_from("b4s", self._buffer, self._buff_i)
493495
self._buff_i += 5
494496
elif b == 0xd7: # fixext 8
495497
typ = TYPE_EXT
496498
if self._max_ext_len < 8:
497499
raise UnpackValueError("%s exceeds max_ext_len(%s)" % (8, self._max_ext_len))
498500
self._reserve(9)
499-
n, obj = self._unpack_from("b8s", self._buffer, self._buff_i)
501+
n, obj = _unpack_from("b8s", self._buffer, self._buff_i)
500502
self._buff_i += 9
501503
elif b == 0xd8: # fixext 16
502504
typ = TYPE_EXT
503505
if self._max_ext_len < 16:
504506
raise UnpackValueError("%s exceeds max_ext_len(%s)" % (16, self._max_ext_len))
505507
self._reserve(17)
506-
n, obj = self._unpack_from("b16s", self._buffer, self._buff_i)
508+
n, obj = _unpack_from("b16s", self._buffer, self._buff_i)
507509
self._buff_i += 17
508510
elif b == 0xd9:
509511
typ = TYPE_RAW
@@ -516,43 +518,43 @@ def _read_header(self, execute=EX_CONSTRUCT):
516518
elif b == 0xda:
517519
typ = TYPE_RAW
518520
self._reserve(2)
519-
n, = self._unpack_from(">H", self._buffer, self._buff_i)
521+
n, = _unpack_from(">H", self._buffer, self._buff_i)
520522
self._buff_i += 2
521523
if n > self._max_str_len:
522524
raise UnpackValueError("%s exceeds max_str_len(%s)", n, self._max_str_len)
523525
obj = self._read(n)
524526
elif b == 0xdb:
525527
typ = TYPE_RAW
526528
self._reserve(4)
527-
n, = self._unpack_from(">I", self._buffer, self._buff_i)
529+
n, = _unpack_from(">I", self._buffer, self._buff_i)
528530
self._buff_i += 4
529531
if n > self._max_str_len:
530532
raise UnpackValueError("%s exceeds max_str_len(%s)", n, self._max_str_len)
531533
obj = self._read(n)
532534
elif b == 0xdc:
533535
typ = TYPE_ARRAY
534536
self._reserve(2)
535-
n, = self._unpack_from(">H", self._buffer, self._buff_i)
537+
n, = _unpack_from(">H", self._buffer, self._buff_i)
536538
self._buff_i += 2
537539
if n > self._max_array_len:
538540
raise UnpackValueError("%s exceeds max_array_len(%s)", n, self._max_array_len)
539541
elif b == 0xdd:
540542
typ = TYPE_ARRAY
541543
self._reserve(4)
542-
n, = self._unpack_from(">I", self._buffer, self._buff_i)
544+
n, = _unpack_from(">I", self._buffer, self._buff_i)
543545
self._buff_i += 4
544546
if n > self._max_array_len:
545547
raise UnpackValueError("%s exceeds max_array_len(%s)", n, self._max_array_len)
546548
elif b == 0xde:
547549
self._reserve(2)
548-
n, = self._unpack_from(">H", self._buffer, self._buff_i)
550+
n, = _unpack_from(">H", self._buffer, self._buff_i)
549551
self._buff_i += 2
550552
if n > self._max_map_len:
551553
raise UnpackValueError("%s exceeds max_map_len(%s)", n, self._max_map_len)
552554
typ = TYPE_MAP
553555
elif b == 0xdf:
554556
self._reserve(4)
555-
n, = self._unpack_from(">I", self._buffer, self._buff_i)
557+
n, = _unpack_from(">I", self._buffer, self._buff_i)
556558
self._buff_i += 4
557559
if n > self._max_map_len:
558560
raise UnpackValueError("%s exceeds max_map_len(%s)", n, self._max_map_len)

0 commit comments

Comments
 (0)