X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=m_librarian%2Fweb%2Fapp.py;h=638f1528e3826c41e102d164d4aa4ac7d8789aa1;hb=ee485bf9817d65fb5b7641a6638b931cf7747b13;hp=3a95c8bd701c67716d9423a8fb90a58405f7027c;hpb=023023391fc401b00827d001b30ee6d7c29fc5ef;p=m_librarian.git diff --git a/m_librarian/web/app.py b/m_librarian/web/app.py index 3a95c8b..638f152 100644 --- a/m_librarian/web/app.py +++ b/m_librarian/web/app.py @@ -1,7 +1,60 @@ -from bottle import route, cheetah_view +from sqlobject.sqlbuilder import CONCAT +from bottle import cheetah_view, redirect, request, route + +from m_librarian.db import Author, open_db +from m_librarian.search import search_authors @route('/') @cheetah_view('index.tmpl') def index(): return {} + + +@route('/search_authors', method='GET') +def _search_authors(): + return redirect('/search_authors/') + + +@route('/search_authors/', method='GET') +@cheetah_view('search_authors.tmpl') +def search_authors_get(): + return {} + + +def decode(value): + if isinstance(value, bytes): + return value.decode('utf-8') + return value + + +def _guess_case_sensitivity(value): + return not value.islower() + + +@route('/search_authors/', method='POST') +@cheetah_view('list_authors.tmpl') +def search_authors_post(): + value = request.forms.get('search_authors') + if not value: + return redirect('/search_authors/') + value = decode(value) + search_type = request.forms.get('search_type') + if not search_type: + search_type = 'start' + case_sensitive = request.forms.get('case_sensitive') + if case_sensitive is None: + case_sensitive = _guess_case_sensitivity(value) + expressions = [( + CONCAT(Author.q.surname, ' ', Author.q.name, ' ', Author.q.misc_name), + decode(value) + )] + open_db() + authors = search_authors(search_type, case_sensitive, {}, expressions, + orderBy=('surname', 'name', 'misc_name')) + return { + 'authors': list(authors), + 'search_authors': value, + 'search_type': search_type, + 'case_sensitive': case_sensitive, + }