def test_find_books_in_directory(self): from calibre.db.adding import find_books_in_directory, compile_rule strip = lambda files: frozenset({os.path.basename(x) for x in files}) def q(one, two): one, two = {strip(a) for a in one}, {strip(b) for b in two} self.assertEqual(one, two) def r(action='ignore', match_type='startswith', query=''): return {'action': action, 'match_type': match_type, 'query': query} def c(*rules): return tuple(map(compile_rule, rules)) files = ['added.epub', 'ignored.md', 'non-book.other'] q(['added.epub ignored.md'.split()], find_books_in_directory('', True, listdir_impl=lambda x: files)) q([['added.epub'], ['ignored.md']], find_books_in_directory('', False, listdir_impl=lambda x, **k: files)) for rules in ( c(r(query='ignored.'), r(action='add', match_type='endswith', query='.OTHER')), c(r(match_type='glob', query='*.md'), r(action='add', match_type='matches', query=r'.+\.other$')), c( r(match_type='not_startswith', query='IGnored.', action='add'), r(query='ignored.md')), ): q(['added.epub non-book.other'.split()], find_books_in_directory('', True, compiled_rules=rules, listdir_impl=lambda x: files))
def find_books_in_directory(self, dirpath, single_book_per_directory, compiled_rules=()): return find_books_in_directory(dirpath, single_book_per_directory, compiled_rules=compiled_rules)
def find_files(root): for dirpath, dirnames, filenames in os.walk(root): for files in find_books_in_directory(dirpath, self.single_book_per_directory): if self.abort_scan: return if files: self.file_groups[len(self.file_groups)] = files
def find_files(root): for dirpath, dirnames, filenames in os.walk(root): for files in find_books_in_directory( dirpath, self.single_book_per_directory): if self.abort_scan: return self.file_groups[len(self.file_groups)] = files
def test_find_books_in_directory(self): from calibre.db.adding import find_books_in_directory, compile_rule strip = lambda files: frozenset({os.path.basename(x) for x in files}) def q(one, two): one, two = {strip(a) for a in one}, {strip(b) for b in two} self.assertEqual(one, two) def r(action='ignore', match_type='startswith', query=''): return {'action':action, 'match_type':match_type, 'query':query} def c(*rules): return tuple(map(compile_rule, rules)) files = ['added.epub', 'ignored.md', 'non-book.other'] q(['added.epub ignored.md'.split()], find_books_in_directory('', True, listdir_impl=lambda x: files)) q([['added.epub'], ['ignored.md']], find_books_in_directory('', False, listdir_impl=lambda x, **k: files)) for rules in ( c(r(query='ignored.'), r(action='add', match_type='endswith', query='.OTHER')), c(r(match_type='glob', query='*.md'), r(action='add', match_type='matches', query=r'.+\.other$')), c(r(match_type='not_startswith', query='IGnored.', action='add'), r(query='ignored.md')), ): q(['added.epub non-book.other'.split()], find_books_in_directory('', True, compiled_rules=rules, listdir_impl=lambda x: files))
def find_files(root): if isinstance(root, type(u'')): root = root.encode(filesystem_encoding) for dirpath, dirnames, filenames in os.walk(root): try: dirpath = dirpath.decode(filesystem_encoding) except UnicodeDecodeError: prints('Ignoring non-decodable directory:', dirpath) continue for files in find_books_in_directory(dirpath, self.single_book_per_directory, compiled_rules=compiled_rules): if self.abort_scan: return self.file_groups[len(self.file_groups)] = files
def find_files(root): for dirpath, dirnames, filenames in os.walk(root): for files in find_books_in_directory( dirpath, self.single_book_per_directory, compiled_rules=compiled_rules): if self.abort_scan: return if iswindows: files = list( resolve_windows_links(files, hwnd=self.win_id)) if files: self.file_groups[len(self.file_groups)] = files
def find_files(root): if isinstance(root, unicode_type): root = root.encode(filesystem_encoding) for dirpath, dirnames, filenames in os.walk(root): try: dirpath = dirpath.decode(filesystem_encoding) except UnicodeDecodeError: prints('Ignoring non-decodable directory:', dirpath) continue for files in find_books_in_directory(dirpath, self.single_book_per_directory, compiled_rules=compiled_rules): if self.abort_scan: return self.file_groups[len(self.file_groups)] = files
def find_books_in_directory(self, dirpath, single_book_per_directory): return find_books_in_directory(dirpath, single_book_per_directory)