in optional-kubernetes-engine/bookshelf/tasks.py [0:0]
def process_book(book_id):
"""
Handles an individual Bookshelf message by looking it up in the
model, querying the Google Books API, and updating the book in the model
with the info found in the Books API.
"""
model = get_model()
book = model.read(book_id)
if not book:
logging.warn("Could not find book with id {}".format(book_id))
return
if 'title' not in book:
logging.warn("Can't process book id {} without a title."
.format(book_id))
return
logging.info("Looking up book with title {}".format(book[
'title']))
new_book_data = query_books_api(book['title'])
if not new_book_data:
return
book['title'] = new_book_data.get('title')
book['author'] = ', '.join(new_book_data.get('authors', []))
book['publishedDate'] = new_book_data.get('publishedDate')
book['description'] = new_book_data.get('description')
# If the new book data has thumbnail images and there isn't currently a
# thumbnail for the book, then copy the image to cloud storage and update
# the book data.
if not book.get('imageUrl') and 'imageLinks' in new_book_data:
new_img_src = new_book_data['imageLinks']['smallThumbnail']
book['imageUrl'] = download_and_upload_image(
new_img_src,
"{}.jpg".format(book['title']))
model.update(book, book_id)