MCPcopy Index your code
hub / github.com/python/cpython / _write_object

Method _write_object

Lib/plistlib.py:762–861  ·  view source on GitHub ↗
(self, value)

Source from the content-addressed store, hash-verified

760 self._fp.write(struct.pack('>BBQ', token | 0xF, 0x13, size))
761
762 def _write_object(self, value):
763 ref = self._getrefnum(value)
764 self._object_offsets[ref] = self._fp.tell()
765 if value is None:
766 self._fp.write(b'\x00')
767
768 elif value is False:
769 self._fp.write(b'\x08')
770
771 elif value is True:
772 self._fp.write(b'\x09')
773
774 elif isinstance(value, int):
775 if value < 0:
776 try:
777 self._fp.write(struct.pack('>Bq', 0x13, value))
778 except struct.error:
779 raise OverflowError(value) from None
780 elif value < 1 << 8:
781 self._fp.write(struct.pack('>BB', 0x10, value))
782 elif value < 1 << 16:
783 self._fp.write(struct.pack('>BH', 0x11, value))
784 elif value < 1 << 32:
785 self._fp.write(struct.pack('>BL', 0x12, value))
786 elif value < 1 << 63:
787 self._fp.write(struct.pack('>BQ', 0x13, value))
788 elif value < 1 << 64:
789 self._fp.write(b'\x14' + value.to_bytes(16, 'big', signed=True))
790 else:
791 raise OverflowError(value)
792
793 elif isinstance(value, float):
794 self._fp.write(struct.pack('>Bd', 0x23, value))
795
796 elif isinstance(value, datetime.datetime):
797 if self._aware_datetime:
798 dt = value.astimezone(datetime.UTC)
799 offset = dt - datetime.datetime(2001, 1, 1, tzinfo=datetime.UTC)
800 f = offset.total_seconds()
801 else:
802 f = (value - datetime.datetime(2001, 1, 1)).total_seconds()
803 self._fp.write(struct.pack('>Bd', 0x33, f))
804
805 elif isinstance(value, (bytes, bytearray)):
806 self._write_size(0x40, len(value))
807 self._fp.write(value)
808
809 elif isinstance(value, str):
810 try:
811 t = value.encode('ascii')
812 self._write_size(0x50, len(value))
813 except UnicodeEncodeError:
814 t = value.encode('utf-16be')
815 self._write_size(0x60, len(t) // 2)
816
817 self._fp.write(t)
818
819 elif isinstance(value, UID):

Callers 1

writeMethod · 0.95

Calls 11

_getrefnumMethod · 0.95
_write_sizeMethod · 0.95
astimezoneMethod · 0.80
datetimeMethod · 0.80
total_secondsMethod · 0.80
tellMethod · 0.45
writeMethod · 0.45
packMethod · 0.45
encodeMethod · 0.45
itemsMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected