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

Method write

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

Source from the content-addressed store, hash-verified

651 self._aware_datetime = aware_datetime
652
653 def write(self, value):
654
655 # Flattened object list:
656 self._objlist = []
657
658 # Mappings from object->objectid
659 # First dict has (type(object), object) as the key,
660 # second dict is used when object is not hashable and
661 # has id(object) as the key.
662 self._objtable = {}
663 self._objidtable = {}
664
665 # Create list of all objects in the plist
666 self._flatten(value)
667
668 # Size of object references in serialized containers
669 # depends on the number of objects in the plist.
670 num_objects = len(self._objlist)
671 self._object_offsets = [0]*num_objects
672 self._ref_size = _count_to_size(num_objects)
673
674 self._ref_format = _BINARY_FORMAT[self._ref_size]
675
676 # Write file header
677 self._fp.write(b'bplist00')
678
679 # Write object list
680 for obj in self._objlist:
681 self._write_object(obj)
682
683 # Write refnum->object offset table
684 top_object = self._getrefnum(value)
685 offset_table_offset = self._fp.tell()
686 offset_size = _count_to_size(offset_table_offset)
687 offset_format = '>' + _BINARY_FORMAT[offset_size] * num_objects
688 self._fp.write(struct.pack(offset_format, *self._object_offsets))
689
690 # Write trailer
691 sort_version = 0
692 trailer = (
693 sort_version, offset_size, self._ref_size, num_objects,
694 top_object, offset_table_offset
695 )
696 self._fp.write(struct.pack('>5xBBBQQQ', *trailer))
697
698 def _flatten(self, value):
699 # First check if the object is in the object table, not used for

Callers

nothing calls this directly

Calls 7

_flattenMethod · 0.95
_write_objectMethod · 0.95
_getrefnumMethod · 0.95
_count_to_sizeFunction · 0.85
writeMethod · 0.45
tellMethod · 0.45
packMethod · 0.45

Tested by

no test coverage detected