X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=scripts%2Fml-search.py;h=07563b94200187c70e97b1883fdfe6d5d601f82f;hb=4524177fe242fe12576af657b84b94ea123c1a30;hp=403780ad0603cf62f5eacec8021af38b86d8dc63;hpb=42c20a0442a4348b9059018f8939dd4e351db8e6;p=m_librarian.git diff --git a/scripts/ml-search.py b/scripts/ml-search.py index 403780a..07563b9 100755 --- a/scripts/ml-search.py +++ b/scripts/ml-search.py @@ -1,35 +1,49 @@ #! /usr/bin/env python -# coding: utf-8 import argparse +import sys from m_lib.defenc import default_encoding -from m_librarian.search import search_authors, search_books, \ - search_extensions, search_genres, search_languages +from m_librarian.db import open_db +from m_librarian.search import search_authors +from m_librarian.translations import translations +_ = translations.ugettext -def _search_authors(args): +def _guess_case_sensitivity(values): + for value in values.values(): + if not value.islower(): + return True + return False + + +def _search_authors(case_sensitive, args): values = {} - for column in 'surname', 'name', 'misc': + for column in 'surname', 'name', 'misc_name': value = getattr(args, column) if value: values[column] = unicode(value, default_encoding) - for author in search_authors(args.search_type, args.case_sensitive, - values): + if case_sensitive is None: + case_sensitive = _guess_case_sensitivity(values) + for author in search_authors(args.search_type, case_sensitive, values): full_name = filter(None, (author.surname, author.name, author.misc_name)) full_name = u' '.join(full_name) print full_name.encode(default_encoding), \ - u"(книг: %d)".encode(default_encoding) % author.count + (u"(%s: %d)" % (_('books'), author.count)).encode(default_encoding) if __name__ == '__main__': main_parser = argparse.ArgumentParser(description='Search') + main_parser.add_argument('-i', '--ignore-case', + action='store_true', + help='ignore case ' + '(default is to guess)') main_parser.add_argument('-I', '--case-sensitive', action='store_true', - help='don\'t ignore case ' - '(default is case-insensitive search)') + help='don\'t ignore case ') main_parser.add_argument('-t', '--search-type', choices=['exact', 'start', 'substring'], + default='start', help='search type: ' 'exact match, substring at the start ' '(this is the default), substring anywhere') @@ -38,8 +52,22 @@ if __name__ == '__main__': parser = subparsers.add_parser('authors', help='Search authors') parser.add_argument('-s', '--surname', help='search by surname') parser.add_argument('-n', '--name', help='search by name') - parser.add_argument('-m', '--misc', help='search by misc. name') + parser.add_argument('-m', '--misc-name', help='search by misc. name') parser.set_defaults(func=_search_authors) args = main_parser.parse_args() - args.func(args) + if args.case_sensitive: + if args.ignore_case: + sys.stderr.write( + "Cannot search case sensitive and case insensitive " + "at the same time\n") + main_parser.print_help() + sys.exit(1) + else: + case_sensitive = True + elif args.ignore_case: + case_sensitive = False + else: + case_sensitive = None # guess case sensitivity + open_db() + args.func(case_sensitive, args)