%PDF- %PDF-
| Direktori : /lib/calibre/calibre/db/cli/ |
| Current File : //lib/calibre/calibre/db/cli/cmd_search.py |
#!/usr/bin/env python3
# License: GPLv3 Copyright: 2017, Kovid Goyal <kovid at kovidgoyal.net>
from calibre import prints
readonly = True
version = 0 # change this if you change signature of implementation()
def implementation(db, notify_changes, query):
from calibre.utils.search_query_parser import ParseException
try:
return db.search(query)
except ParseException as err:
e = ValueError(_('Failed to parse search query: ({0}) with error: {1}').format(query, err))
e.suppress_traceback = True
raise e from err
def option_parser(get_parser, args):
parser = get_parser(
_(
'''\
%prog search [options] search expression
Search the library for the specified search term, returning a comma separated
list of book ids matching the search expression. The output format is useful
to feed into other commands that accept a list of ids as input.
The search expression can be anything from calibre's powerful search query
language, for example: %prog search {0}
'''
).format('author:asimov \'title:"i robot"\'')
)
parser.add_option(
'-l',
'--limit',
default=-1,
type=int,
help=_('The maximum number of results to return. Default is all results.')
)
return parser
def main(opts, args, dbctx):
if len(args) < 1:
raise SystemExit(_('Error: You must specify the search expression'))
q = ' '.join(args)
try:
ids = dbctx.run('search', q)
except Exception as e:
if getattr(e, 'suppress_traceback', False):
raise SystemExit(str(e))
raise
if not ids:
raise SystemExit(_('No books matching the search expression:') + ' ' + q)
ids = sorted(ids)
if opts.limit > -1:
ids = ids[:opts.limit]
prints(','.join(map(str, ids)), end='')
return 0