%PDF- %PDF-
Direktori : /lib/calibre/calibre/db/cli/ |
Current File : //lib/calibre/calibre/db/cli/cmd_check_library.py |
#!/usr/bin/env python3 # License: GPLv3 Copyright: 2017, Kovid Goyal <kovid at kovidgoyal.net> import csv import io import sys from calibre import prints from calibre.db.legacy import LibraryDatabase from calibre.library.check_library import CHECKS, CheckLibrary readonly = False version = 0 # change this if you change signature of implementation() no_remote = True def implementation(db, notify_changes, *args): raise NotImplementedError() def option_parser(get_parser, args): parser = get_parser( _( '''\ %prog check_library [options] Perform some checks on the filesystem representing a library. Reports are {0} ''' ).format(', '.join([c[0] for c in CHECKS])) ) parser.add_option( '-c', '--csv', default=False, action='store_true', help=_('Output in CSV') ) parser.add_option( '-r', '--report', default=None, dest='report', help=_("Comma-separated list of reports.\n" "Default: all") ) parser.add_option( '-e', '--ignore_extensions', default=None, dest='exts', help=_("Comma-separated list of extensions to ignore.\n" "Default: all") ) parser.add_option( '-n', '--ignore_names', default=None, dest='names', help=_("Comma-separated list of names to ignore.\n" "Default: all") ) return parser def _print_check_library_results(checker, check, as_csv=False, out=sys.stdout): attr = check[0] list = getattr(checker, attr, None) if list is None: return if as_csv: to_output = [(check[1], i[0], i[1]) for i in list] buf = io.StringIO(newline='') csv_print = csv.writer(buf) for line in to_output: csv_print.writerow(line) out.write(buf.getvalue()) else: print(check[1], file=out) for i in list: print(' %-40.40s - %-40.40s' % (i[0], i[1]), file=out) def main(opts, args, dbctx): if opts.report is None: checks = CHECKS else: checks = [] for r in opts.report.split(','): found = False for c in CHECKS: if c[0] == r: checks.append(c) found = True break if not found: prints(_('Unknown report check'), r) return 1 if opts.names is None: names = [] else: names = [f.strip() for f in opts.names.split(',') if f.strip()] if opts.exts is None: exts = [] else: exts = [f.strip() for f in opts.exts.split(',') if f.strip()] if not LibraryDatabase.exists_at(dbctx.library_path): prints('No library found at', dbctx.library_path, file=sys.stderr) raise SystemExit(1) db = LibraryDatabase(dbctx.library_path) prints(_('Vacuuming database...')) db.new_api.vacuum() checker = CheckLibrary(dbctx.library_path, db) checker.scan_library(names, exts) for check in checks: _print_check_library_results(checker, check, as_csv=opts.csv) return 0