From 1ee76ee0b6999a693c7a3275a7c5cfe1e9ee9301 Mon Sep 17 00:00:00 2001 From: oysteini Date: Tue, 8 Mar 2011 13:30:17 +0000 Subject: [PATCH] Implementert kommandoen 'list'. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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). --- python/search.py | 21 ++++++++------- python/worblehat.py | 64 +++++++++++++++++++++++++++++++-------------- 2 files changed, 55 insertions(+), 30 deletions(-) diff --git a/python/search.py b/python/search.py index 0dcf56c..2715e83 100644 --- a/python/search.py +++ b/python/search.py @@ -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') diff --git a/python/worblehat.py b/python/worblehat.py index b5ed2cc..bc0c6ee 100755 --- a/python/worblehat.py +++ b/python/worblehat.py @@ -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': [],