X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=m_librarian%2Fweb%2Fapp.py;h=283ddb715b8b819fb0039c57bf375337eff84a1e;hb=f1e5552af5ec0775c4d3569dda92b4ac9eb41d7b;hp=5d9285e2254912b1f01404d9afaa4cebb41f6489;hpb=ecd2349c26418c8b55ec9e0d17009321b6472236;p=m_librarian.git diff --git a/m_librarian/web/app.py b/m_librarian/web/app.py index 5d9285e..283ddb7 100644 --- a/m_librarian/web/app.py +++ b/m_librarian/web/app.py @@ -1,14 +1,12 @@ # -*- coding: utf-8 -*- import os - -from sqlobject.sqlbuilder import CONCAT from bottle import cheetah_view, redirect, request, route, static_file -from m_librarian.config import get_config -from m_librarian.db import Author, Book -from m_librarian.download import download -from m_librarian.search import search_authors, search_books +from ..config import get_config +from ..db import Book +from ..download import download +from ..search import search_authors_raw, books_by_author, search_books_raw @route('/') @@ -30,71 +28,21 @@ 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) - )] - authors = search_authors(search_type, case_sensitive, {}, expressions, - orderBy=('surname', 'name', 'misc_name')) - columns = get_config().getlist('columns', 'author', ['fullname']) - return { - 'authors': list(authors), - 'search_authors': value, - 'search_type': search_type, - 'case_sensitive': case_sensitive, - 'columns': columns, - } + return search_authors_raw(value, search_type, case_sensitive) -@route('/books-by-author//', method='GET') -@cheetah_view('books_by_author.tmpl') -def books_by_author(id): - use_filters = get_config().getint('filters', 'use_in_books_list', 1) - columns = get_config().getlist('columns', 'book', ['title']) - if use_filters: - join_expressions = [] - join_expressions.append(Book.j.authors) - join_expressions.append(Author.q.id == id) - books = search_books('full', None, {}, join_expressions, - orderBy=('series', 'ser_no', 'title'), - use_filters=use_filters) - return { - 'author': Author.get(id), - 'books': books, - 'columns': columns, - } - else: - return { - 'author': Author.get(id), - 'books': Book.select( - Book.j.authors & (Author.q.id == id), - orderBy=['series', 'ser_no', 'title'], - ), - 'columns': columns, - } +@route('/books-by-author//', method='GET') +@cheetah_view('list_books.tmpl') +def _books_by_author(aid): + return books_by_author(aid) @route('/static/') @@ -110,11 +58,16 @@ def send_static(filename): @route('/download/', method='POST') @cheetah_view('download.tmpl') def download_books(): - books_ids = request.forms.getall('books') - download_path = get_config().getpath('download', 'path') + books_ids = [] + form = request.forms + for k in form: + if k.split('_')[-1] == 'books': + for bid in form.getall(k): + books_ids.append(bid) if books_ids: - for id in books_ids: - book = Book.get(int(id)) + download_path = get_config().getpath('download', 'path') + for bid in books_ids: + book = Book.get(int(bid)) download(book, download_path) return { 'message': u'Книги сохранены.', @@ -144,29 +97,7 @@ def search_books_post(): value = request.forms.get('search_books') if not value: return redirect('/search_books/') - 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) use_filters = request.forms.get('use_filters') - books = search_books(search_type, case_sensitive, {'title': value}, None, - orderBy=('title',), use_filters=use_filters) - books_by_authors = {} - for book in books: - author = book.authors[0].fullname - if author in books_by_authors: - books_by_author = books_by_authors[author] - else: - books_by_author = books_by_authors[author] = [] - books_by_author.append(book) - columns = get_config().getlist('columns', 'book', ['title']) - return { - 'books_by_author': books_by_authors, - 'search_books': value, - 'search_type': search_type, - 'case_sensitive': case_sensitive, - 'columns': columns, - } + return search_books_raw(value, search_type, case_sensitive, use_filters)