Implementert kommandoen 'list'.
Flyttet samtidig på litt kode. Plukket ut printedelene av søkefunksjonene til egne funksjoner som printer en liste med bøker/personer, slik at de samme funksjonene kan brukes av 'list'-kommandoen også. Flyttet dessuten søkefunksjonen for personer inn i search.py (skal vi først ha en fil som heter search.py (noe jeg er litt usikker på poenget med) bør denne også ligge der).
This commit is contained in:
parent
25215718ee
commit
1ee76ee0b6
|
@ -4,16 +4,17 @@ from web.library.models import *
|
|||
from django.db.models import Q
|
||||
from util import *
|
||||
|
||||
def search_book_cmd(search_strings, search_description=False):
|
||||
books = search_book(search_strings, search_description)
|
||||
format = '%-13s %-10s %-40s %-30s'
|
||||
for book in books:
|
||||
b_id = book.getid() or ''
|
||||
title = cut_str(book.title, 40, '*')
|
||||
authors = map(lambda p: p.first_name+' '+p.last_name,
|
||||
book.get_authors())
|
||||
authors_str = cut_str(', '.join(authors), 30, '*')
|
||||
print format % (book.isbn, b_id, title, authors_str)
|
||||
def search_person(search_strings, search_description=False):
|
||||
basic_query=Person.objects.select_related('books__book__alt_titles')
|
||||
for word in search_strings:
|
||||
basic_query=basic_query.filter(Q(first_name__icontains=word) |
|
||||
Q(last_name__icontains=word) |
|
||||
Q(id__icontains=word) |
|
||||
Q(books__book__isbn__icontains=word) |
|
||||
Q(books__book__title__icontains=word) |
|
||||
Q(books__book__alt_titles__alt_title=word) |
|
||||
Q(books__book__id__id__icontains=word))
|
||||
return remove_duplicates(basic_query.all())
|
||||
|
||||
def search_book(search_strings, search_description=False):
|
||||
basic_query = Book.objects.select_related('persons__person','id','alt_titles')
|
||||
|
|
|
@ -55,26 +55,46 @@ def remove_duplicates(list):
|
|||
d[i]=None
|
||||
return d.keys()
|
||||
|
||||
def search_person_cmd(search_strings, search_description=False):
|
||||
people = search_person(search_strings, search_description)
|
||||
format = '%-10s %-20s %-70s'
|
||||
for person in people:
|
||||
name = cut_str(person.first_name+' '+person.last_name, 20)
|
||||
p_id = cut_str(person.id, 10)
|
||||
books = cut_str(', '.join(map(lambda x: x.book.title, person.books.all())), 70)
|
||||
print format % (p_id, name, books)
|
||||
def list_cmd(what):
|
||||
if what == 'person':
|
||||
print_person_list(Person.objects.all())
|
||||
elif what == 'book':
|
||||
print_book_list(Book.objects.all())
|
||||
elif what == 'category':
|
||||
print_category_list(Category.objects.all())
|
||||
else:
|
||||
print 'I don\' know what \'%s\' is.' % what
|
||||
|
||||
def search_person(search_strings, search_description=False):
|
||||
basic_query=Person.objects.select_related('books__book__alt_titles')
|
||||
for word in search_strings:
|
||||
basic_query=basic_query.filter(Q(first_name__icontains=word) |
|
||||
Q(last_name__icontains=word) |
|
||||
Q(id__icontains=word) |
|
||||
Q(books__book__isbn__icontains=word) |
|
||||
Q(books__book__title__icontains=word) |
|
||||
Q(books__book__alt_titles__alt_title=word) |
|
||||
Q(books__book__id__id__icontains=word))
|
||||
return remove_duplicates(basic_query.all())
|
||||
def print_person_list(lst):
|
||||
format = '%-13s %-20s %-70s'
|
||||
for person in lst:
|
||||
name = cut_str(person.first_name+' '+person.last_name, 20)
|
||||
p_id = cut_str(person.id, 10)
|
||||
books = cut_str(', '.join(map(lambda x: x.book.title, person.books.all())), 70)
|
||||
print format % (p_id, name, books)
|
||||
|
||||
def print_book_list(lst):
|
||||
format = '%-13s %-10s %-40s %-30s'
|
||||
for book in lst:
|
||||
b_id = book.getid() or ''
|
||||
title = cut_str(book.title, 40, '*')
|
||||
authors = map(lambda p: p.first_name+' '+p.last_name,
|
||||
book.get_authors())
|
||||
authors_str = cut_str(', '.join(authors), 30, '*')
|
||||
print format % (book.isbn, b_id, title, authors_str)
|
||||
|
||||
def print_category_list(lst):
|
||||
format = '%-20s %s'
|
||||
for category in lst:
|
||||
print format % (category.id, category.name)
|
||||
|
||||
def search_person_cmd(search_strings, search_description=False):
|
||||
people = search.search_person(search_strings, search_description)
|
||||
print_person_list(people)
|
||||
|
||||
def search_book_cmd(search_strings, search_description=False):
|
||||
books = search.search_book(search_strings, search_description)
|
||||
print_book_list(books)
|
||||
|
||||
def commit(filename=None):
|
||||
if filename:
|
||||
|
@ -187,10 +207,14 @@ commands = { 'show':
|
|||
{ 'args': [('ids', (1,None))],
|
||||
'options': ['commit_format', 'tmp_file'],
|
||||
'fun': show_book_or_person },
|
||||
'list':
|
||||
{ 'args': [('what', (1,1))],
|
||||
'options': [],
|
||||
'fun': list_cmd },
|
||||
'search':
|
||||
{ 'args': [('search_strings', (1,None))],
|
||||
'options': ['search_description'],
|
||||
'fun': search.search_book_cmd },
|
||||
'fun': search_book_cmd },
|
||||
'search-person':
|
||||
{ 'args': [('search_strings', (1,None))],
|
||||
'options': [],
|
||||
|
|
Reference in New Issue