code: def parse_list_parts(data, bucket_name, object_name, upload_id):
      
      root = S3Element.fromstring('ListPartsResult', data)
  
      is_truncated = root.get_child_text('IsTruncated').lower() == 'true'
      part_marker = root.get_child_text('NextPartNumberMarker', strict=False)
      parts = [
          UploadPart(bucket_name, object_name, upload_id,
                     part.get_int_elem('PartNumber'),
                     part.get_etag_elem(),
                     part.get_localized_time_elem('LastModified'),
                     part.get_int_elem('Size'))
          for part in root.findall('Part')
      ]
  
      return parts, is_truncated, part_marker
docs: Parser for list parts response.
  
      :param data: Response data for list parts.
      :param bucket_name: Response for the bucket.
      :param object_name: Response for the object.
      :param upload_id: Upload id of object name for
         the active multipart session.
      :return: Replies back three distinctive components.
         - List of :class:`UploadPart <UploadPart>`.
         - True if list is truncated, False otherwise.
         - Next part marker for the next request if the
           list was truncated.