Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/utils/cborutil.py @ 43077:687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Done with
python3.7 contrib/byteify-strings.py -i $(hg files 'set:mercurial/**.py - mercurial/thirdparty/** + hgext/**.py - hgext/fsmonitor/pywatchman/** - mercurial/__init__.py')
black -l 80 -t py33 -S $(hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**" - hgext/fsmonitor/pywatchman/**')
# skip-blame mass-reformatting only
Differential Revision: https://phab.mercurial-scm.org/D6972
author | Augie Fackler <augie@google.com> |
---|---|
date | Sun, 06 Oct 2019 09:48:39 -0400 |
parents | 2372284d9457 |
children | d783f945a701 |
comparison
equal
deleted
inserted
replaced
43076:2372284d9457 | 43077:687b865b95ad |
---|---|
123 yield BREAK | 123 yield BREAK |
124 | 124 |
125 | 125 |
126 def streamencodeint(v): | 126 def streamencodeint(v): |
127 if v >= 18446744073709551616 or v < -18446744073709551616: | 127 if v >= 18446744073709551616 or v < -18446744073709551616: |
128 raise ValueError('big integers not supported') | 128 raise ValueError(b'big integers not supported') |
129 | 129 |
130 if v >= 0: | 130 if v >= 0: |
131 yield encodelength(MAJOR_TYPE_UINT, v) | 131 yield encodelength(MAJOR_TYPE_UINT, v) |
132 else: | 132 else: |
133 yield encodelength(MAJOR_TYPE_NEGINT, abs(v) - 1) | 133 yield encodelength(MAJOR_TYPE_NEGINT, abs(v) - 1) |
239 continue | 239 continue |
240 fn = STREAM_ENCODERS[ty] | 240 fn = STREAM_ENCODERS[ty] |
241 break | 241 break |
242 | 242 |
243 if not fn: | 243 if not fn: |
244 raise ValueError('do not know how to encode %s' % type(v)) | 244 raise ValueError(b'do not know how to encode %s' % type(v)) |
245 | 245 |
246 return fn(v) | 246 return fn(v) |
247 | 247 |
248 | 248 |
249 class CBORDecodeError(Exception): | 249 class CBORDecodeError(Exception): |
261 def _elementtointeger(b, i): | 261 def _elementtointeger(b, i): |
262 return ord(b[i]) | 262 return ord(b[i]) |
263 | 263 |
264 | 264 |
265 STRUCT_BIG_UBYTE = struct.Struct(r'>B') | 265 STRUCT_BIG_UBYTE = struct.Struct(r'>B') |
266 STRUCT_BIG_USHORT = struct.Struct('>H') | 266 STRUCT_BIG_USHORT = struct.Struct(b'>H') |
267 STRUCT_BIG_ULONG = struct.Struct('>L') | 267 STRUCT_BIG_ULONG = struct.Struct(b'>L') |
268 STRUCT_BIG_ULONGLONG = struct.Struct('>Q') | 268 STRUCT_BIG_ULONGLONG = struct.Struct(b'>Q') |
269 | 269 |
270 SPECIAL_NONE = 0 | 270 SPECIAL_NONE = 0 |
271 SPECIAL_START_INDEFINITE_BYTESTRING = 1 | 271 SPECIAL_START_INDEFINITE_BYTESTRING = 1 |
272 SPECIAL_START_ARRAY = 2 | 272 SPECIAL_START_ARRAY = 2 |
273 SPECIAL_START_MAP = 3 | 273 SPECIAL_START_MAP = 3 |
353 # It is an indefinite length bytestring. | 353 # It is an indefinite length bytestring. |
354 else: | 354 else: |
355 return True, None, 1, SPECIAL_START_INDEFINITE_BYTESTRING | 355 return True, None, 1, SPECIAL_START_INDEFINITE_BYTESTRING |
356 | 356 |
357 elif majortype == MAJOR_TYPE_STRING: | 357 elif majortype == MAJOR_TYPE_STRING: |
358 raise CBORDecodeError('string major type not supported') | 358 raise CBORDecodeError(b'string major type not supported') |
359 | 359 |
360 elif majortype == MAJOR_TYPE_ARRAY: | 360 elif majortype == MAJOR_TYPE_ARRAY: |
361 # Beginning of arrays are treated as uints in order to decode their | 361 # Beginning of arrays are treated as uints in order to decode their |
362 # length. We don't allow indefinite length arrays. | 362 # length. We don't allow indefinite length arrays. |
363 complete, size, readcount = decodeuint(subtype, b, offset) | 363 complete, size, readcount = decodeuint(subtype, b, offset) |
402 if not complete: | 402 if not complete: |
403 return False, None, readcount2, SPECIAL_NONE | 403 return False, None, readcount2, SPECIAL_NONE |
404 | 404 |
405 if special != SPECIAL_START_ARRAY: | 405 if special != SPECIAL_START_ARRAY: |
406 raise CBORDecodeError( | 406 raise CBORDecodeError( |
407 'expected array after finite set ' 'semantic tag' | 407 b'expected array after finite set ' b'semantic tag' |
408 ) | 408 ) |
409 | 409 |
410 return True, size, readcount + readcount2 + 1, SPECIAL_START_SET | 410 return True, size, readcount + readcount2 + 1, SPECIAL_START_SET |
411 | 411 |
412 else: | 412 else: |
413 raise CBORDecodeError('semantic tag %d not allowed' % tagvalue) | 413 raise CBORDecodeError(b'semantic tag %d not allowed' % tagvalue) |
414 | 414 |
415 elif majortype == MAJOR_TYPE_SPECIAL: | 415 elif majortype == MAJOR_TYPE_SPECIAL: |
416 # Only specific values for the information field are allowed. | 416 # Only specific values for the information field are allowed. |
417 if subtype == SUBTYPE_FALSE: | 417 if subtype == SUBTYPE_FALSE: |
418 return True, False, 1, SPECIAL_NONE | 418 return True, False, 1, SPECIAL_NONE |
422 return True, None, 1, SPECIAL_NONE | 422 return True, None, 1, SPECIAL_NONE |
423 elif subtype == SUBTYPE_INDEFINITE: | 423 elif subtype == SUBTYPE_INDEFINITE: |
424 return True, None, 1, SPECIAL_INDEFINITE_BREAK | 424 return True, None, 1, SPECIAL_INDEFINITE_BREAK |
425 # If value is 24, subtype is in next byte. | 425 # If value is 24, subtype is in next byte. |
426 else: | 426 else: |
427 raise CBORDecodeError('special type %d not allowed' % subtype) | 427 raise CBORDecodeError(b'special type %d not allowed' % subtype) |
428 else: | 428 else: |
429 assert False | 429 assert False |
430 | 430 |
431 | 431 |
432 def decodeuint(subtype, b, offset=0, allowindefinite=False): | 432 def decodeuint(subtype, b, offset=0, allowindefinite=False): |
455 # Indefinite length specifier. | 455 # Indefinite length specifier. |
456 elif subtype == 31: | 456 elif subtype == 31: |
457 if allowindefinite: | 457 if allowindefinite: |
458 return True, None, 0 | 458 return True, None, 0 |
459 else: | 459 else: |
460 raise CBORDecodeError('indefinite length uint not allowed here') | 460 raise CBORDecodeError(b'indefinite length uint not allowed here') |
461 elif subtype >= 28: | 461 elif subtype >= 28: |
462 raise CBORDecodeError( | 462 raise CBORDecodeError( |
463 'unsupported subtype on integer type: %d' % subtype | 463 b'unsupported subtype on integer type: %d' % subtype |
464 ) | 464 ) |
465 | 465 |
466 if subtype == 24: | 466 if subtype == 24: |
467 s = STRUCT_BIG_UBYTE | 467 s = STRUCT_BIG_UBYTE |
468 elif subtype == 25: | 468 elif subtype == 25: |
470 elif subtype == 26: | 470 elif subtype == 26: |
471 s = STRUCT_BIG_ULONG | 471 s = STRUCT_BIG_ULONG |
472 elif subtype == 27: | 472 elif subtype == 27: |
473 s = STRUCT_BIG_ULONGLONG | 473 s = STRUCT_BIG_ULONGLONG |
474 else: | 474 else: |
475 raise CBORDecodeError('bounds condition checking violation') | 475 raise CBORDecodeError(b'bounds condition checking violation') |
476 | 476 |
477 if len(b) - offset >= s.size: | 477 if len(b) - offset >= s.size: |
478 return True, s.unpack_from(b, offset)[0], s.size | 478 return True, s.unpack_from(b, offset)[0], s.size |
479 else: | 479 else: |
480 return False, None, len(b) - offset - s.size | 480 return False, None, len(b) - offset - s.size |
639 if special == SPECIAL_NONE: | 639 if special == SPECIAL_NONE: |
640 self._decodedvalues.append(value) | 640 self._decodedvalues.append(value) |
641 | 641 |
642 elif special == SPECIAL_START_ARRAY: | 642 elif special == SPECIAL_START_ARRAY: |
643 self._collectionstack.append( | 643 self._collectionstack.append( |
644 {'remaining': value, 'v': [],} | 644 {b'remaining': value, b'v': [],} |
645 ) | 645 ) |
646 self._state = self._STATE_WANT_ARRAY_VALUE | 646 self._state = self._STATE_WANT_ARRAY_VALUE |
647 | 647 |
648 elif special == SPECIAL_START_MAP: | 648 elif special == SPECIAL_START_MAP: |
649 self._collectionstack.append( | 649 self._collectionstack.append( |
650 {'remaining': value, 'v': {},} | 650 {b'remaining': value, b'v': {},} |
651 ) | 651 ) |
652 self._state = self._STATE_WANT_MAP_KEY | 652 self._state = self._STATE_WANT_MAP_KEY |
653 | 653 |
654 elif special == SPECIAL_START_SET: | 654 elif special == SPECIAL_START_SET: |
655 self._collectionstack.append( | 655 self._collectionstack.append( |
656 {'remaining': value, 'v': set(),} | 656 {b'remaining': value, b'v': set(),} |
657 ) | 657 ) |
658 self._state = self._STATE_WANT_SET_VALUE | 658 self._state = self._STATE_WANT_SET_VALUE |
659 | 659 |
660 elif special == SPECIAL_START_INDEFINITE_BYTESTRING: | 660 elif special == SPECIAL_START_INDEFINITE_BYTESTRING: |
661 self._state = self._STATE_WANT_BYTESTRING_CHUNK_FIRST | 661 self._state = self._STATE_WANT_BYTESTRING_CHUNK_FIRST |
662 | 662 |
663 else: | 663 else: |
664 raise CBORDecodeError( | 664 raise CBORDecodeError( |
665 'unhandled special state: %d' % special | 665 b'unhandled special state: %d' % special |
666 ) | 666 ) |
667 | 667 |
668 # This value becomes an element of the current array. | 668 # This value becomes an element of the current array. |
669 elif self._state == self._STATE_WANT_ARRAY_VALUE: | 669 elif self._state == self._STATE_WANT_ARRAY_VALUE: |
670 # Simple values get appended. | 670 # Simple values get appended. |
671 if special == SPECIAL_NONE: | 671 if special == SPECIAL_NONE: |
672 c = self._collectionstack[-1] | 672 c = self._collectionstack[-1] |
673 c['v'].append(value) | 673 c[b'v'].append(value) |
674 c['remaining'] -= 1 | 674 c[b'remaining'] -= 1 |
675 | 675 |
676 # self._state doesn't need changed. | 676 # self._state doesn't need changed. |
677 | 677 |
678 # An array nested within an array. | 678 # An array nested within an array. |
679 elif special == SPECIAL_START_ARRAY: | 679 elif special == SPECIAL_START_ARRAY: |
680 lastc = self._collectionstack[-1] | 680 lastc = self._collectionstack[-1] |
681 newvalue = [] | 681 newvalue = [] |
682 | 682 |
683 lastc['v'].append(newvalue) | 683 lastc[b'v'].append(newvalue) |
684 lastc['remaining'] -= 1 | 684 lastc[b'remaining'] -= 1 |
685 | 685 |
686 self._collectionstack.append( | 686 self._collectionstack.append( |
687 {'remaining': value, 'v': newvalue,} | 687 {b'remaining': value, b'v': newvalue,} |
688 ) | 688 ) |
689 | 689 |
690 # self._state doesn't need changed. | 690 # self._state doesn't need changed. |
691 | 691 |
692 # A map nested within an array. | 692 # A map nested within an array. |
693 elif special == SPECIAL_START_MAP: | 693 elif special == SPECIAL_START_MAP: |
694 lastc = self._collectionstack[-1] | 694 lastc = self._collectionstack[-1] |
695 newvalue = {} | 695 newvalue = {} |
696 | 696 |
697 lastc['v'].append(newvalue) | 697 lastc[b'v'].append(newvalue) |
698 lastc['remaining'] -= 1 | 698 lastc[b'remaining'] -= 1 |
699 | 699 |
700 self._collectionstack.append( | 700 self._collectionstack.append( |
701 {'remaining': value, 'v': newvalue} | 701 {b'remaining': value, b'v': newvalue} |
702 ) | 702 ) |
703 | 703 |
704 self._state = self._STATE_WANT_MAP_KEY | 704 self._state = self._STATE_WANT_MAP_KEY |
705 | 705 |
706 elif special == SPECIAL_START_SET: | 706 elif special == SPECIAL_START_SET: |
707 lastc = self._collectionstack[-1] | 707 lastc = self._collectionstack[-1] |
708 newvalue = set() | 708 newvalue = set() |
709 | 709 |
710 lastc['v'].append(newvalue) | 710 lastc[b'v'].append(newvalue) |
711 lastc['remaining'] -= 1 | 711 lastc[b'remaining'] -= 1 |
712 | 712 |
713 self._collectionstack.append( | 713 self._collectionstack.append( |
714 {'remaining': value, 'v': newvalue,} | 714 {b'remaining': value, b'v': newvalue,} |
715 ) | 715 ) |
716 | 716 |
717 self._state = self._STATE_WANT_SET_VALUE | 717 self._state = self._STATE_WANT_SET_VALUE |
718 | 718 |
719 elif special == SPECIAL_START_INDEFINITE_BYTESTRING: | 719 elif special == SPECIAL_START_INDEFINITE_BYTESTRING: |
720 raise CBORDecodeError( | 720 raise CBORDecodeError( |
721 'indefinite length bytestrings ' | 721 b'indefinite length bytestrings ' |
722 'not allowed as array values' | 722 b'not allowed as array values' |
723 ) | 723 ) |
724 | 724 |
725 else: | 725 else: |
726 raise CBORDecodeError( | 726 raise CBORDecodeError( |
727 'unhandled special item when ' | 727 b'unhandled special item when ' |
728 'expecting array value: %d' % special | 728 b'expecting array value: %d' % special |
729 ) | 729 ) |
730 | 730 |
731 # This value becomes the key of the current map instance. | 731 # This value becomes the key of the current map instance. |
732 elif self._state == self._STATE_WANT_MAP_KEY: | 732 elif self._state == self._STATE_WANT_MAP_KEY: |
733 if special == SPECIAL_NONE: | 733 if special == SPECIAL_NONE: |
734 self._currentmapkey = value | 734 self._currentmapkey = value |
735 self._state = self._STATE_WANT_MAP_VALUE | 735 self._state = self._STATE_WANT_MAP_VALUE |
736 | 736 |
737 elif special == SPECIAL_START_INDEFINITE_BYTESTRING: | 737 elif special == SPECIAL_START_INDEFINITE_BYTESTRING: |
738 raise CBORDecodeError( | 738 raise CBORDecodeError( |
739 'indefinite length bytestrings ' | 739 b'indefinite length bytestrings ' |
740 'not allowed as map keys' | 740 b'not allowed as map keys' |
741 ) | 741 ) |
742 | 742 |
743 elif special in ( | 743 elif special in ( |
744 SPECIAL_START_ARRAY, | 744 SPECIAL_START_ARRAY, |
745 SPECIAL_START_MAP, | 745 SPECIAL_START_MAP, |
746 SPECIAL_START_SET, | 746 SPECIAL_START_SET, |
747 ): | 747 ): |
748 raise CBORDecodeError( | 748 raise CBORDecodeError( |
749 'collections not supported as map ' 'keys' | 749 b'collections not supported as map ' b'keys' |
750 ) | 750 ) |
751 | 751 |
752 # We do not allow special values to be used as map keys. | 752 # We do not allow special values to be used as map keys. |
753 else: | 753 else: |
754 raise CBORDecodeError( | 754 raise CBORDecodeError( |
755 'unhandled special item when ' | 755 b'unhandled special item when ' |
756 'expecting map key: %d' % special | 756 b'expecting map key: %d' % special |
757 ) | 757 ) |
758 | 758 |
759 # This value becomes the value of the current map key. | 759 # This value becomes the value of the current map key. |
760 elif self._state == self._STATE_WANT_MAP_VALUE: | 760 elif self._state == self._STATE_WANT_MAP_VALUE: |
761 # Simple values simply get inserted into the map. | 761 # Simple values simply get inserted into the map. |
762 if special == SPECIAL_NONE: | 762 if special == SPECIAL_NONE: |
763 lastc = self._collectionstack[-1] | 763 lastc = self._collectionstack[-1] |
764 lastc['v'][self._currentmapkey] = value | 764 lastc[b'v'][self._currentmapkey] = value |
765 lastc['remaining'] -= 1 | 765 lastc[b'remaining'] -= 1 |
766 | 766 |
767 self._state = self._STATE_WANT_MAP_KEY | 767 self._state = self._STATE_WANT_MAP_KEY |
768 | 768 |
769 # A new array is used as the map value. | 769 # A new array is used as the map value. |
770 elif special == SPECIAL_START_ARRAY: | 770 elif special == SPECIAL_START_ARRAY: |
771 lastc = self._collectionstack[-1] | 771 lastc = self._collectionstack[-1] |
772 newvalue = [] | 772 newvalue = [] |
773 | 773 |
774 lastc['v'][self._currentmapkey] = newvalue | 774 lastc[b'v'][self._currentmapkey] = newvalue |
775 lastc['remaining'] -= 1 | 775 lastc[b'remaining'] -= 1 |
776 | 776 |
777 self._collectionstack.append( | 777 self._collectionstack.append( |
778 {'remaining': value, 'v': newvalue,} | 778 {b'remaining': value, b'v': newvalue,} |
779 ) | 779 ) |
780 | 780 |
781 self._state = self._STATE_WANT_ARRAY_VALUE | 781 self._state = self._STATE_WANT_ARRAY_VALUE |
782 | 782 |
783 # A new map is used as the map value. | 783 # A new map is used as the map value. |
784 elif special == SPECIAL_START_MAP: | 784 elif special == SPECIAL_START_MAP: |
785 lastc = self._collectionstack[-1] | 785 lastc = self._collectionstack[-1] |
786 newvalue = {} | 786 newvalue = {} |
787 | 787 |
788 lastc['v'][self._currentmapkey] = newvalue | 788 lastc[b'v'][self._currentmapkey] = newvalue |
789 lastc['remaining'] -= 1 | 789 lastc[b'remaining'] -= 1 |
790 | 790 |
791 self._collectionstack.append( | 791 self._collectionstack.append( |
792 {'remaining': value, 'v': newvalue,} | 792 {b'remaining': value, b'v': newvalue,} |
793 ) | 793 ) |
794 | 794 |
795 self._state = self._STATE_WANT_MAP_KEY | 795 self._state = self._STATE_WANT_MAP_KEY |
796 | 796 |
797 # A new set is used as the map value. | 797 # A new set is used as the map value. |
798 elif special == SPECIAL_START_SET: | 798 elif special == SPECIAL_START_SET: |
799 lastc = self._collectionstack[-1] | 799 lastc = self._collectionstack[-1] |
800 newvalue = set() | 800 newvalue = set() |
801 | 801 |
802 lastc['v'][self._currentmapkey] = newvalue | 802 lastc[b'v'][self._currentmapkey] = newvalue |
803 lastc['remaining'] -= 1 | 803 lastc[b'remaining'] -= 1 |
804 | 804 |
805 self._collectionstack.append( | 805 self._collectionstack.append( |
806 {'remaining': value, 'v': newvalue,} | 806 {b'remaining': value, b'v': newvalue,} |
807 ) | 807 ) |
808 | 808 |
809 self._state = self._STATE_WANT_SET_VALUE | 809 self._state = self._STATE_WANT_SET_VALUE |
810 | 810 |
811 elif special == SPECIAL_START_INDEFINITE_BYTESTRING: | 811 elif special == SPECIAL_START_INDEFINITE_BYTESTRING: |
812 raise CBORDecodeError( | 812 raise CBORDecodeError( |
813 'indefinite length bytestrings not ' | 813 b'indefinite length bytestrings not ' |
814 'allowed as map values' | 814 b'allowed as map values' |
815 ) | 815 ) |
816 | 816 |
817 else: | 817 else: |
818 raise CBORDecodeError( | 818 raise CBORDecodeError( |
819 'unhandled special item when ' | 819 b'unhandled special item when ' |
820 'expecting map value: %d' % special | 820 b'expecting map value: %d' % special |
821 ) | 821 ) |
822 | 822 |
823 self._currentmapkey = None | 823 self._currentmapkey = None |
824 | 824 |
825 # This value is added to the current set. | 825 # This value is added to the current set. |
826 elif self._state == self._STATE_WANT_SET_VALUE: | 826 elif self._state == self._STATE_WANT_SET_VALUE: |
827 if special == SPECIAL_NONE: | 827 if special == SPECIAL_NONE: |
828 lastc = self._collectionstack[-1] | 828 lastc = self._collectionstack[-1] |
829 lastc['v'].add(value) | 829 lastc[b'v'].add(value) |
830 lastc['remaining'] -= 1 | 830 lastc[b'remaining'] -= 1 |
831 | 831 |
832 elif special == SPECIAL_START_INDEFINITE_BYTESTRING: | 832 elif special == SPECIAL_START_INDEFINITE_BYTESTRING: |
833 raise CBORDecodeError( | 833 raise CBORDecodeError( |
834 'indefinite length bytestrings not ' | 834 b'indefinite length bytestrings not ' |
835 'allowed as set values' | 835 b'allowed as set values' |
836 ) | 836 ) |
837 | 837 |
838 elif special in ( | 838 elif special in ( |
839 SPECIAL_START_ARRAY, | 839 SPECIAL_START_ARRAY, |
840 SPECIAL_START_MAP, | 840 SPECIAL_START_MAP, |
841 SPECIAL_START_SET, | 841 SPECIAL_START_SET, |
842 ): | 842 ): |
843 raise CBORDecodeError( | 843 raise CBORDecodeError( |
844 'collections not allowed as set ' 'values' | 844 b'collections not allowed as set ' b'values' |
845 ) | 845 ) |
846 | 846 |
847 # We don't allow non-trivial types to exist as set values. | 847 # We don't allow non-trivial types to exist as set values. |
848 else: | 848 else: |
849 raise CBORDecodeError( | 849 raise CBORDecodeError( |
850 'unhandled special item when ' | 850 b'unhandled special item when ' |
851 'expecting set value: %d' % special | 851 b'expecting set value: %d' % special |
852 ) | 852 ) |
853 | 853 |
854 # This value represents the first chunk in an indefinite length | 854 # This value represents the first chunk in an indefinite length |
855 # bytestring. | 855 # bytestring. |
856 elif self._state == self._STATE_WANT_BYTESTRING_CHUNK_FIRST: | 856 elif self._state == self._STATE_WANT_BYTESTRING_CHUNK_FIRST: |
877 assert not self._collectionstack | 877 assert not self._collectionstack |
878 self._state = self._STATE_NONE | 878 self._state = self._STATE_NONE |
879 | 879 |
880 else: | 880 else: |
881 raise CBORDecodeError( | 881 raise CBORDecodeError( |
882 'unexpected special value when ' | 882 b'unexpected special value when ' |
883 'expecting bytestring chunk: %d' % special | 883 b'expecting bytestring chunk: %d' % special |
884 ) | 884 ) |
885 | 885 |
886 # This value represents the non-initial chunk in an indefinite | 886 # This value represents the non-initial chunk in an indefinite |
887 # length bytestring. | 887 # length bytestring. |
888 elif self._state == self._STATE_WANT_BYTESTRING_CHUNK_SUBSEQUENT: | 888 elif self._state == self._STATE_WANT_BYTESTRING_CHUNK_SUBSEQUENT: |
899 assert not self._collectionstack | 899 assert not self._collectionstack |
900 self._state = self._STATE_NONE | 900 self._state = self._STATE_NONE |
901 | 901 |
902 else: | 902 else: |
903 raise CBORDecodeError( | 903 raise CBORDecodeError( |
904 'unexpected special value when ' | 904 b'unexpected special value when ' |
905 'expecting bytestring chunk: %d' % special | 905 b'expecting bytestring chunk: %d' % special |
906 ) | 906 ) |
907 | 907 |
908 else: | 908 else: |
909 raise CBORDecodeError( | 909 raise CBORDecodeError( |
910 'unhandled decoder state: %d' % self._state | 910 b'unhandled decoder state: %d' % self._state |
911 ) | 911 ) |
912 | 912 |
913 # We could have just added the final value in a collection. End | 913 # We could have just added the final value in a collection. End |
914 # all complete collections at the top of the stack. | 914 # all complete collections at the top of the stack. |
915 while True: | 915 while True: |
922 break | 922 break |
923 | 923 |
924 # Or we are expecting more items for this collection. | 924 # Or we are expecting more items for this collection. |
925 lastc = self._collectionstack[-1] | 925 lastc = self._collectionstack[-1] |
926 | 926 |
927 if lastc['remaining']: | 927 if lastc[b'remaining']: |
928 break | 928 break |
929 | 929 |
930 # The collection at the top of the stack is complete. | 930 # The collection at the top of the stack is complete. |
931 | 931 |
932 # Discard it, as it isn't needed for future items. | 932 # Discard it, as it isn't needed for future items. |
939 if self._collectionstack: | 939 if self._collectionstack: |
940 self._state = { | 940 self._state = { |
941 list: self._STATE_WANT_ARRAY_VALUE, | 941 list: self._STATE_WANT_ARRAY_VALUE, |
942 dict: self._STATE_WANT_MAP_KEY, | 942 dict: self._STATE_WANT_MAP_KEY, |
943 set: self._STATE_WANT_SET_VALUE, | 943 set: self._STATE_WANT_SET_VALUE, |
944 }[type(self._collectionstack[-1]['v'])] | 944 }[type(self._collectionstack[-1][b'v'])] |
945 | 945 |
946 # If this is the root collection, emit it. | 946 # If this is the root collection, emit it. |
947 else: | 947 else: |
948 self._decodedvalues.append(lastc['v']) | 948 self._decodedvalues.append(lastc[b'v']) |
949 self._state = self._STATE_NONE | 949 self._state = self._STATE_NONE |
950 | 950 |
951 return ( | 951 return ( |
952 bool(self._decodedvalues), | 952 bool(self._decodedvalues), |
953 offset - initialoffset, | 953 offset - initialoffset, |
1051 decoder = sansiodecoder() | 1051 decoder = sansiodecoder() |
1052 | 1052 |
1053 havevalues, readcount, wantbytes = decoder.decode(b) | 1053 havevalues, readcount, wantbytes = decoder.decode(b) |
1054 | 1054 |
1055 if readcount != len(b): | 1055 if readcount != len(b): |
1056 raise CBORDecodeError('input data not fully consumed') | 1056 raise CBORDecodeError(b'input data not fully consumed') |
1057 | 1057 |
1058 if decoder.inprogress: | 1058 if decoder.inprogress: |
1059 raise CBORDecodeError('input data not complete') | 1059 raise CBORDecodeError(b'input data not complete') |
1060 | 1060 |
1061 return decoder.getavailable() | 1061 return decoder.getavailable() |