import os
-from sqlobject.sqlbuilder import CONCAT
from bottle import cheetah_view, redirect, request, route, static_file
+from sqlobject.sqlbuilder import CONCAT
-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 Author, Book
+from ..download import download
+from ..search import search_authors, search_books
@route('/')
}
-@route('/books-by-author/<id:int>/', method='GET')
-@cheetah_view('books_by_author.tmpl')
-def books_by_author(id):
+@route('/books-by-author/<aid:int>/', method='GET')
+@cheetah_view('list_books.tmpl')
+def books_by_author(aid):
use_filters = get_config().getint('filters', 'use_in_books_list', 1)
columns = get_config().getlist('columns', 'book', ['title'])
+ author = Author.get(aid)
if use_filters:
join_expressions = []
join_expressions.append(Book.j.authors)
- join_expressions.append(Author.q.id == id)
+ join_expressions.append(Author.q.id == aid)
books = search_books('full', None, {}, join_expressions,
- orderBy=('series', 'ser_no', 'title'),
+ orderBy=('series', 'ser_no', 'title', '-date'),
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,
- }
+ books = Book.select(
+ Book.j.authors & (Author.q.id == aid),
+ orderBy=['series', 'ser_no', 'title'],
+ )
+
+ return {
+ 'books_by_author': {author.fullname: list(books)},
+ 'columns': columns,
+ }
@route('/static/<filename:path>')
@route('/download/', method='POST')
@cheetah_view('download.tmpl')
def download_books():
- books_ids = request.forms.getall('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)
download_path = get_config().getpath('download', 'path')
if books_ids:
- for id in books_ids:
- book = Book.get(int(id))
+ for bid in books_ids:
+ book = Book.get(int(bid))
download(book, download_path)
return {
'message': u'Книги сохранены.',
orderBy=('title',), use_filters=use_filters)
books_by_authors = {}
for book in books:
- author = book.authors[0].fullname
+ author = book.author1
if author in books_by_authors:
books_by_author = books_by_authors[author]
else: