def flags(self, index):
        flags = QtCore.Qt.ItemIsDropEnabled | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
        if self.__HEADERS[index.column()]['attr'] == 'hero_offset':
            f = self.files[index.row()]
            mime_guess = mimetypes.guess_type(f.path)[0]
            if mime_guess is not None and mime_guess.startswith('video'):
                flags |= QtCore.Qt.ItemIsEditable
        elif self.__HEADERS[index.column()]['editable']:
            flags |= QtCore.Qt.ItemIsEditable
        return flags
all items can accept drops, hero_offset is editable for video, otherwise use editable
dataset/ETHPy150Open shotgunsoftware/pyqt-uploader/uploader.py/ShotgunFileModel.flags