def get_file_guids(cls, materialized_path, provider, node=None): guids = [] path = materialized_path.strip('/') file_obj = cls.load(path) if not file_obj: file_obj = TrashedFileNode.load(path) # At this point, file_obj may be an OsfStorageFile, an OsfStorageFolder, or a # TrashedFileNode. TrashedFileNodes do not have *File and *Folder subclasses, since # only osfstorage trashes folders. To search for children of TrashFileNodes # representing ex-OsfStorageFolders, we will reimplement the `children` method of the # Folder class here. if not file_obj.is_file: children = [] if isinstance(file_obj, TrashedFileNode): children = TrashedFileNode.find(Q('parent', 'eq', file_obj._id)) else: children = file_obj.children for item in children: guids.extend(cls.get_file_guids(item.path, provider, node=node)) else: try: guid = Guid.find(Q('referent', 'eq', file_obj))[0] except IndexError: guid = None if guid: guids.append(guid._id) return guids
def main(): init_app(routes=False) dry = '--dry' in sys.argv if not dry: script_utils.add_file_logger(logger, __file__) with TokuTransaction(): stored = StoredFileNode.find().get_keys() trashed = TrashedFileNode.find().get_keys() stored_set = set(stored) trashed_set = set(trashed) intersection = trashed_set & stored_set print('There are {} restored trashed file nodes'.format(len(intersection))) for trash_id in intersection: TrashedFileNode.remove_one(trash_id) print('Removed TrashedFileNode {}'.format(trash_id)) if dry: raise RuntimeError('Dry run - rolling back transaction')