X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=m_librarian%2Fweb%2Fapp.py;h=d34b9df64f83fc6b8521af7364e5b5b19927a67b;hb=12e046208dda7a46efc4b02dde9a1cb507a940ba;hp=7032825e8224d3f4c0cf94e04228eeddd46d21f7;hpb=b446a389796d3e6922ce93f089e25324765a8c62;p=m_librarian.git diff --git a/m_librarian/web/app.py b/m_librarian/web/app.py index 7032825..d34b9df 100644 --- a/m_librarian/web/app.py +++ b/m_librarian/web/app.py @@ -8,13 +8,15 @@ 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 +from m_librarian.search import search_authors, search_books @route('/') @cheetah_view('index.tmpl') def index(): - return {} + return { + 'get_config': get_config, + } @route('/search_authors', method='GET') @@ -57,24 +59,42 @@ def search_authors_post(): )] 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, } @route('/books-by-author//', method='GET') @cheetah_view('books_by_author.tmpl') def books_by_author(id): - return { - 'author': Author.get(id), - 'books': Book.select( - Book.j.authors & (Author.q.id == id), - orderBy=['series', 'ser_no', 'title'], - ) - } + 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('/static/') @@ -87,11 +107,66 @@ def send_static(filename): ) -@route('/download//', method='GET') +@route('/download/', method='POST') @cheetah_view('download.tmpl') -def download_book(id): - book = Book.get(id) - download(book, get_config().get('download', 'path')) +def download_books(): + books_ids = request.forms.getall('books') + download_path = get_config().getpath('download', 'path') + if books_ids: + for id in books_ids: + book = Book.get(int(id)) + download(book, download_path) + return { + 'message': u'Книги сохранены.', + } + else: + return { + 'message': u'Не выбрано книг для сохранения.', + } + + +@route('/search_books', method='GET') +def _search_books(): + return redirect('/search_books/') + + +@route('/search_books/', method='GET') +@cheetah_view('search_books.tmpl') +def search_books_get(): + return { + 'get_config': get_config, + } + + +@route('/search_books/', method='POST') +@cheetah_view('list_books.tmpl') +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.author1 + 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 { - 'message': u'Книга сохранена', + 'books_by_author': books_by_authors, + 'search_books': value, + 'search_type': search_type, + 'case_sensitive': case_sensitive, + 'columns': columns, }