'Reads a chunk at a time. If the current position is within a
chunk the remainder of the chunk is returned.'

def readchunk(self):

    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
