X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=m_librarian%2Fweb%2Fapp.py;h=19fca6c4254076abb46c3b6c23c66f54656de2c7;hb=fdede95cc489c5519b2e38130d66d4c01775e341;hp=e4677d317f10e7b6cb9204766b30500c2ba7b51e;hpb=fbaf358a8c297202b8c0926d6a3f383298b8e3e2;p=m_librarian.git diff --git a/m_librarian/web/app.py b/m_librarian/web/app.py index e4677d3..19fca6c 100644 --- a/m_librarian/web/app.py +++ b/m_librarian/web/app.py @@ -1,8 +1,14 @@ +# -*- coding: utf-8 -*- + +import os + from sqlobject.sqlbuilder import CONCAT -from bottle import cheetah_view, redirect, request, route +from bottle import cheetah_view, redirect, request, route, static_file -from m_librarian.db import Author, open_db -from m_librarian.search import search_authors +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 @route('/') @@ -49,7 +55,85 @@ def search_authors_post(): 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)} + return { + 'authors': list(authors), + 'search_authors': value, + 'search_type': search_type, + 'case_sensitive': case_sensitive, + } + + +@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'], + ) + } + + +@route('/static/') +def send_static(filename): + return static_file( + filename, root=os.path.join( + os.path.dirname(__file__), + 'static' + ) + ) + + +@route('/download/', method='POST') +@cheetah_view('download.tmpl') +def download_books(): + books_ids = request.forms.getall('books') + download_path = get_config().get('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 {} + + +@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) + books = search_books(search_type, case_sensitive, {'title': value}, None, + orderBy=('title',)) + return { + 'books': list(books), + 'search_books': value, + 'search_type': search_type, + 'case_sensitive': case_sensitive, + }