docs: def readchunk(self):
          """Reads a chunk at a time. If the current position is within a
          chunk the remainder of the chunk is returned.
          """
          received = len(self.__buffer)
          chunk_data = EMPTY
          chunk_size = int(self.chunk_size)
  
          if received > 0:
              chunk_data = self.__buffer
          elif self.__position < int(self.length):
              chunk_number = int((received + self.__position) / chunk_size)
              chunk = self.__chunks.find_one({"files_id": self._id,
                                              "n": chunk_number})
              if not chunk:
                  raise CorruptGridFile("no chunk #%d" % chunk_number)
  
              chunk_data = chunk["data"][self.__position % chunk_size:]
  
              if not chunk_data:
                  raise CorruptGridFile("truncated chunk")
  
          self.__position += len(chunk_data)
          self.__buffer = EMPTY
          return chunk_data