X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=m_librarian%2Fweb%2Fapp.py;h=283ddb715b8b819fb0039c57bf375337eff84a1e;hb=73d5cd7b4ae212cb3f913bac350d2cb7e9a45889;hp=e4677d317f10e7b6cb9204766b30500c2ba7b51e;hpb=fbaf358a8c297202b8c0926d6a3f383298b8e3e2;p=m_librarian.git diff --git a/m_librarian/web/app.py b/m_librarian/web/app.py index e4677d3..283ddb7 100644 --- a/m_librarian/web/app.py +++ b/m_librarian/web/app.py @@ -1,14 +1,20 @@ -from sqlobject.sqlbuilder import CONCAT -from bottle import cheetah_view, redirect, request, route +# -*- coding: utf-8 -*- -from m_librarian.db import Author, open_db -from m_librarian.search import search_authors +import os +from bottle import cheetah_view, redirect, request, route, static_file + +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('/') @cheetah_view('index.tmpl') def index(): - return {} + return { + 'get_config': get_config, + } @route('/search_authors', method='GET') @@ -22,34 +28,76 @@ 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)} + return search_authors_raw(value, search_type, case_sensitive) + + +@route('/books-by-author//', method='GET') +@cheetah_view('list_books.tmpl') +def _books_by_author(aid): + return books_by_author(aid) + + +@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 = [] + 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: + download_path = get_config().getpath('download', 'path') + for bid in books_ids: + book = Book.get(int(bid)) + 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/') + search_type = request.forms.get('search_type') + case_sensitive = request.forms.get('case_sensitive') + use_filters = request.forms.get('use_filters') + return search_books_raw(value, search_type, case_sensitive, use_filters)