code: def read_full(data, size):
      
      default_read_size = 32768 # 32KiB per read operation.
      chunk = io.BytesIO()
      chunk_size = 0
  
      while chunk_size < size:
          read_size = default_read_size
          if (size - chunk_size) < default_read_size:
              read_size = size - chunk_size
          current_data = data.read(read_size)
          if not current_data or len(current_data) == 0:
              break
          chunk.write(current_data)
          chunk_size+= len(current_data)
  
      return chunk.getvalue()
docs: read_full reads exactly `size` bytes from reader. returns
      `size` bytes.
  
      :param data: Input stream to read from.
      :param size: Number of bytes to read from `data`.
      :return: Returns :bytes:`part_data`