Skip to content

Commit db85cfa

Browse files
committed
Removed duplicated code in 'elif' statements using the MESSAGE_PACK_DICT.
1 parent 424e81a commit db85cfa

File tree

1 file changed

+55
-162
lines changed

1 file changed

+55
-162
lines changed

msgpack/fallback.py

Lines changed: 55 additions & 162 deletions
Original file line numberDiff line numberDiff line change
@@ -478,181 +478,74 @@ def _read_header(self):
478478
obj = False
479479
elif b == 0xC3:
480480
obj = True
481-
elif b == 0xC4:
482-
typ = TYPE_BIN
483-
self._reserve(1)
484-
n = self._buffer[self._buff_i]
485-
self._buff_i += 1
486-
if n > self._max_bin_len:
487-
raise ValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len))
488-
obj = self._read(n)
489-
elif b == 0xC5:
490-
typ = TYPE_BIN
491-
self._reserve(2)
492-
n = _unpack_from(">H", self._buffer, self._buff_i)[0]
493-
self._buff_i += 2
494-
if n > self._max_bin_len:
495-
raise ValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len))
496-
obj = self._read(n)
497-
elif b == 0xC6:
498-
typ = TYPE_BIN
499-
self._reserve(4)
500-
n = _unpack_from(">I", self._buffer, self._buff_i)[0]
501-
self._buff_i += 4
481+
elif 0xC4 <= b <= 0xC6:
482+
message_pack = MESSAGE_PACK_DICT[b]
483+
typ = message_pack.type
484+
self._reserve(message_pack.size)
485+
if len(message_pack.format) > 0:
486+
n = _unpack_from(message_pack.format, self._buffer, self._buff_i)[0]
487+
else:
488+
n = self._buffer[self._buff_i]
489+
self._buff_i += message_pack.size
502490
if n > self._max_bin_len:
503491
raise ValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len))
504492
obj = self._read(n)
505-
elif b == 0xC7: # ext 8
506-
typ = TYPE_EXT
507-
self._reserve(2)
508-
L, n = _unpack_from("Bb", self._buffer, self._buff_i)
509-
self._buff_i += 2
493+
elif 0xC7 <= b <= 0xC9:
494+
message_pack = MESSAGE_PACK_DICT[b]
495+
typ = message_pack.type
496+
self._reserve(message_pack.size)
497+
L, n = _unpack_from(message_pack.format, self._buffer, self._buff_i)
498+
self._buff_i += message_pack.size
510499
if L > self._max_ext_len:
511500
raise ValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len))
512501
obj = self._read(L)
513-
elif b == 0xC8: # ext 16
514-
typ = TYPE_EXT
515-
self._reserve(3)
516-
L, n = _unpack_from(">Hb", self._buffer, self._buff_i)
517-
self._buff_i += 3
518-
if L > self._max_ext_len:
519-
raise ValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len))
520-
obj = self._read(L)
521-
elif b == 0xC9: # ext 32
522-
typ = TYPE_EXT
523-
self._reserve(5)
524-
L, n = _unpack_from(">Ib", self._buffer, self._buff_i)
525-
self._buff_i += 5
526-
if L > self._max_ext_len:
527-
raise ValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len))
528-
obj = self._read(L)
529-
elif b == 0xCA:
530-
self._reserve(4)
531-
obj = _unpack_from(">f", self._buffer, self._buff_i)[0]
532-
self._buff_i += 4
533-
elif b == 0xCB:
534-
self._reserve(8)
535-
obj = _unpack_from(">d", self._buffer, self._buff_i)[0]
536-
self._buff_i += 8
537-
elif b == 0xCC:
538-
self._reserve(1)
539-
obj = self._buffer[self._buff_i]
540-
self._buff_i += 1
541-
elif b == 0xCD:
542-
self._reserve(2)
543-
obj = _unpack_from(">H", self._buffer, self._buff_i)[0]
544-
self._buff_i += 2
545-
elif b == 0xCE:
546-
self._reserve(4)
547-
obj = _unpack_from(">I", self._buffer, self._buff_i)[0]
548-
self._buff_i += 4
549-
elif b == 0xCF:
550-
self._reserve(8)
551-
obj = _unpack_from(">Q", self._buffer, self._buff_i)[0]
552-
self._buff_i += 8
553-
elif b == 0xD0:
554-
self._reserve(1)
555-
obj = _unpack_from("b", self._buffer, self._buff_i)[0]
556-
self._buff_i += 1
557-
elif b == 0xD1:
558-
self._reserve(2)
559-
obj = _unpack_from(">h", self._buffer, self._buff_i)[0]
560-
self._buff_i += 2
561-
elif b == 0xD2:
562-
self._reserve(4)
563-
obj = _unpack_from(">i", self._buffer, self._buff_i)[0]
564-
self._buff_i += 4
565-
elif b == 0xD3:
566-
self._reserve(8)
567-
obj = _unpack_from(">q", self._buffer, self._buff_i)[0]
568-
self._buff_i += 8
569-
elif b == 0xD4: # fixext 1
570-
typ = TYPE_EXT
571-
if self._max_ext_len < 1:
572-
raise ValueError("%s exceeds max_ext_len(%s)" % (1, self._max_ext_len))
573-
self._reserve(2)
574-
n, obj = _unpack_from("b1s", self._buffer, self._buff_i)
575-
self._buff_i += 2
576-
elif b == 0xD5: # fixext 2
577-
typ = TYPE_EXT
578-
if self._max_ext_len < 2:
579-
raise ValueError("%s exceeds max_ext_len(%s)" % (2, self._max_ext_len))
580-
self._reserve(3)
581-
n, obj = _unpack_from("b2s", self._buffer, self._buff_i)
582-
self._buff_i += 3
583-
elif b == 0xD6: # fixext 4
584-
typ = TYPE_EXT
585-
if self._max_ext_len < 4:
586-
raise ValueError("%s exceeds max_ext_len(%s)" % (4, self._max_ext_len))
587-
self._reserve(5)
588-
n, obj = _unpack_from("b4s", self._buffer, self._buff_i)
589-
self._buff_i += 5
590-
elif b == 0xD7: # fixext 8
591-
typ = TYPE_EXT
592-
if self._max_ext_len < 8:
593-
raise ValueError("%s exceeds max_ext_len(%s)" % (8, self._max_ext_len))
594-
self._reserve(9)
595-
n, obj = _unpack_from("b8s", self._buffer, self._buff_i)
596-
self._buff_i += 9
597-
elif b == 0xD8: # fixext 16
598-
typ = TYPE_EXT
599-
if self._max_ext_len < 16:
600-
raise ValueError("%s exceeds max_ext_len(%s)" % (16, self._max_ext_len))
601-
self._reserve(17)
602-
n, obj = _unpack_from("b16s", self._buffer, self._buff_i)
603-
self._buff_i += 17
604-
elif b == 0xD9:
605-
typ = TYPE_RAW
606-
self._reserve(1)
607-
n = self._buffer[self._buff_i]
608-
self._buff_i += 1
609-
if n > self._max_str_len:
610-
raise ValueError("%s exceeds max_str_len(%s)", n, self._max_str_len)
611-
obj = self._read(n)
612-
elif b == 0xDA:
613-
typ = TYPE_RAW
614-
self._reserve(2)
615-
(n,) = _unpack_from(">H", self._buffer, self._buff_i)
616-
self._buff_i += 2
617-
if n > self._max_str_len:
618-
raise ValueError("%s exceeds max_str_len(%s)", n, self._max_str_len)
619-
obj = self._read(n)
620-
elif b == 0xDB:
621-
typ = TYPE_RAW
622-
self._reserve(4)
623-
(n,) = _unpack_from(">I", self._buffer, self._buff_i)
624-
self._buff_i += 4
502+
elif 0xCA <= b <= 0xD3:
503+
message_pack = MESSAGE_PACK_DICT[b]
504+
self._reserve(message_pack.size)
505+
if len(message_pack.format) > 0:
506+
obj = _unpack_from(message_pack.format, self._buffer, self._buff_i)[0]
507+
else:
508+
obj = self._buffer[self._buff_i]
509+
self._buff_i += message_pack.size
510+
elif 0xD4 <= b <= 0xD8:
511+
message_pack = MESSAGE_PACK_DICT[b]
512+
typ = message_pack.type
513+
if self._max_ext_len < message_pack.size:
514+
raise ValueError(
515+
"%s exceeds max_ext_len(%s)"
516+
% (message_pack.size, self._max_ext_len)
517+
)
518+
self._reserve(message_pack.size + 1)
519+
n, obj = _unpack_from(message_pack.format, self._buffer, self._buff_i)
520+
self._buff_i += message_pack.size + 1
521+
elif 0xD9 <= b <= 0xDB:
522+
message_pack = MESSAGE_PACK_DICT[b]
523+
typ = message_pack.type
524+
self._reserve(message_pack.size)
525+
if len(message_pack.format) > 0:
526+
(n,) = _unpack_from(message_pack.format, self._buffer, self._buff_i)
527+
else:
528+
n = self._buffer[self._buff_i]
529+
self._buff_i += message_pack.size
625530
if n > self._max_str_len:
626531
raise ValueError("%s exceeds max_str_len(%s)", n, self._max_str_len)
627532
obj = self._read(n)
628-
elif b == 0xDC:
629-
typ = TYPE_ARRAY
630-
self._reserve(2)
631-
(n,) = _unpack_from(">H", self._buffer, self._buff_i)
632-
self._buff_i += 2
633-
if n > self._max_array_len:
634-
raise ValueError("%s exceeds max_array_len(%s)", n, self._max_array_len)
635-
elif b == 0xDD:
636-
typ = TYPE_ARRAY
637-
self._reserve(4)
638-
(n,) = _unpack_from(">I", self._buffer, self._buff_i)
639-
self._buff_i += 4
533+
elif 0xDC <= b <= 0xDD:
534+
message_pack = MESSAGE_PACK_DICT[b]
535+
typ = message_pack.type
536+
self._reserve(message_pack.size)
537+
(n,) = _unpack_from(message_pack.format, self._buffer, self._buff_i)
538+
self._buff_i += message_pack.size
640539
if n > self._max_array_len:
641540
raise ValueError("%s exceeds max_array_len(%s)", n, self._max_array_len)
642-
elif b == 0xDE:
643-
self._reserve(2)
644-
(n,) = _unpack_from(">H", self._buffer, self._buff_i)
645-
self._buff_i += 2
541+
elif 0xDE <= b <= 0xDF:
542+
message_pack = MESSAGE_PACK_DICT[b]
543+
self._reserve(message_pack.size)
544+
(n,) = _unpack_from(message_pack.format, self._buffer, self._buff_i)
545+
self._buff_i += message_pack.size
646546
if n > self._max_map_len:
647547
raise ValueError("%s exceeds max_map_len(%s)", n, self._max_map_len)
648-
typ = TYPE_MAP
649-
elif b == 0xDF:
650-
self._reserve(4)
651-
(n,) = _unpack_from(">I", self._buffer, self._buff_i)
652-
self._buff_i += 4
653-
if n > self._max_map_len:
654-
raise ValueError("%s exceeds max_map_len(%s)", n, self._max_map_len)
655-
typ = TYPE_MAP
548+
typ = message_pack.type
656549
else:
657550
raise FormatError("Unknown header: 0x%x" % b)
658551
return typ, n, obj

0 commit comments

Comments
 (0)