def run(self, argv): args = argv[1:] self.exit_code = 0 if not args: self.print_err('Usage:\n' ' trash-rm PATTERN\n' '\n' 'Please specify PATTERN') self.exit_code = 8 return trashcan = CleanableTrashcan(FileRemover()) cmd = Filter(trashcan.delete_trashinfo_and_backup_copy) cmd.use_pattern(args[0]) listing = ListTrashinfos(cmd.delete_if_matches, self.file_reader, self.unable_to_parse_path) scanner = TrashDirsScanner(self.environ, self.getuid, self.list_volumes, TopTrashDirRules(self.file_reader)) for event, args in scanner.scan_trash_dirs(): if event == TrashDirsScanner.Found: path, volume = args listing.list_from_volume_trashdir(path, volume)
class TestDescribe_AvailableTrashDirs_when_parent_is_unsticky(unittest.TestCase): def setUp(self): self.fs = Mock() self.scanner = TrashDirsScanner( environ={}, getuid=lambda: 123, top_trash_dir_rules=TopTrashDirRules(self.fs), list_volumes=lambda: ['/topdir'], ) self.fs.is_sticky_dir.side_effect = ( lambda path: {'/topdir/.Trash':False}[path]) def test_it_should_report_skipped_dir_non_sticky(self): self.fs.exists.side_effect = ( lambda path: {'/topdir/.Trash/123':True}[path]) result = list(self.scanner.scan_trash_dirs()) self.assertEqual( [(TrashDirsScanner.SkippedBecauseParentNotSticky, ('/topdir/.Trash/123',)), (TrashDirsScanner.Found, ('/topdir/.Trash-123', '/topdir'))], result) def test_it_shouldnot_care_about_non_existent(self): self.fs.exists.side_effect = ( lambda path: {'/topdir/.Trash/123':False}[path]) result = list(self.scanner.scan_trash_dirs()) self.assertEqual( [(TrashDirsScanner.Found, ('/topdir/.Trash-123', '/topdir'))], result)
def run(self, argv): args = argv[1:] self.exit_code = 0 if not args: self.print_err('Usage:\n' ' trash-rm PATTERN\n' '\n' 'Please specify PATTERN') self.exit_code = 8 return trashcan = CleanableTrashcan(FileRemover()) cmd = Filter(args[0]) listing = ListTrashinfos(self.file_reader) user_info_provider = UserInfoProvider(self.environ, self.getuid) scanner = TrashDirsScanner(user_info_provider, self.volumes_listing, TopTrashDirRules(self.file_reader)) for event, args in scanner.scan_trash_dirs(self.environ): if event == trash_dir_found: path, volume = args for type, arg in listing.list_from_volume_trashdir( path, volume): if type == 'unable_to_parse_path': self.unable_to_parse_path(arg) elif type == 'trashed_file': original_location, info_file = arg if cmd.matches(original_location): trashcan.delete_trashinfo_and_backup_copy( info_file)
def setUp(self): self.fs = Mock() self.scanner = TrashDirsScanner( environ={}, getuid=lambda: 123, top_trash_dir_rules=TopTrashDirRules(self.fs), list_volumes=lambda: ['/topdir']) self.fs.exists.side_effect = (lambda path: {'/topdir/.Trash/123':True}[path])
def setUp(self): self.fs = Mock() self.scanner = TrashDirsScanner( environ={}, getuid=lambda: 123, top_trash_dir_rules=TopTrashDirRules(self.fs), list_volumes=lambda: ['/topdir'], ) self.fs.is_sticky_dir.side_effect = ( lambda path: {'/topdir/.Trash':False}[path])
def test_scan_trash_dirs(self): volumes_listing = Mock(spec=VolumesListing) environ = {'HOME': '/home/user'} user_info_provider = UserInfoProvider(environ, lambda: 123) scanner = TrashDirsScanner( user_info_provider, volumes_listing=volumes_listing, top_trash_dir_rules=Mock(), ) volumes_listing.list_volumes.return_value = ['/vol', '/vol2'] result = list(scanner.scan_trash_dirs({})) self.assertEqual([(trash_dir_found, ('/home/user/.local/share/Trash', '/')), (trash_dir_found, ('/vol/.Trash-123', '/vol')), (trash_dir_found, ('/vol2/.Trash-123', '/vol2'))], result)
def trashdirs(self): result = [] class FakeTopTrashDirRules: def valid_to_be_read(_, _path): if self.Trash_dir_is_sticky: return TopTrashDirValidationResult.Valid else: return TopTrashDirValidationResult.NotValidBecauseIsNotSticky scanner = TrashDirsScanner( environ=self.environ, getuid=lambda:self.uid, top_trash_dir_rules= FakeTopTrashDirRules(), list_volumes = lambda: self.volumes, ) for event, args in scanner.scan_trash_dirs(): if event == TrashDirsScanner.Found: path, _volume = args result.append(path) return result
class TestDescribe_AvailableTrashDirs_when_parent_is_symlink(unittest.TestCase): def setUp(self): self.fs = Mock() self.scanner = TrashDirsScanner( environ={}, getuid=lambda: 123, top_trash_dir_rules=TopTrashDirRules(self.fs), list_volumes=lambda: ['/topdir']) self.fs.exists.side_effect = (lambda path: {'/topdir/.Trash/123':True}[path]) def test_it_should_skip_symlink(self): self.fs.is_sticky_dir.return_value = True self.fs.is_symlink.return_value = True result = list(self.scanner.scan_trash_dirs()) self.assertEqual([ (TrashDirsScanner.SkippedBecauseParentIsSymlink, ('/topdir/.Trash/123',)), (TrashDirsScanner.Found, ('/topdir/.Trash-123', '/topdir')) ], result)