def read_data(self, offset, length):
        end = offset + length
        eof = self['size']
        if end > eof:
            end = eof
            length = end - offset
            if length <= 0:
                return ''
        first_block = self.blocksize / offset
        last_block = end / self.blocksize

        output = StringIO()
        for n_block in range(first_block, last_block+1):
            block_offset = n_block * self.blocksize

            fragment_offset = 0
            if n_block == first_block:
                fragment_offset = offset - block_offset

            fragment_end = self.blocksize
            if n_block == last_block:
                fragment_end = end - block_offset

            block_data = self.read_block(n_block)
            fragment = block_data[fragment_offset:fragment_end]
            assert len(fragment) == fragment_end - fragment_offset
            output.write(fragment)

        output = output.getvalue()
        assert len(output) == length
        return output
dataset/ETHPy150Open mgax/SpaghettiFS/spaghettifs/storage.py/StorageInode.read_data/swapped operands of `/`