def book(isbn): user = session.get("user_id") try: row = db.execute("SELECT * FROM books WHERE isbn=:isbn;", { "isbn": isbn }).fetchone() except Exception as e: return '<div> <a href="/signup">Error No book found Go back</a></div>' if row is None: flash("no book found", category="error") return '<div> <a href="/signup">Error No book found Go back</a></div>' print("row here", row) book = Book(row[0], row[1], row[2], row[3], row[4], reviewCount=row[5] or 0, average=row[6] or 0.0, sum=row[7] or 0) # book = Book(row[0], row[1], row[2], row[3], row[4]) print("))))))))))) book", book.__repr__()) reviews = [] # a variable to check whether the user have a review or not newReview = False userHasRev = False userReview = None try: user_review = db.execute( "SELECT * FROM reviews WHERE book_id=:book_id AND user_id=:user_id", { "book_id": book.id, "user_id": session["user_id"] }).fetchone() if (user_review): userReview = Review(user_review[0], user_review[1], user_review[2], user_review[3], user_review[4], user_review[4]) reviews.append(userReview) # userHasRev = True print("---------->usrRev", user_review) revRow = db.execute("SELECT * FROM reviews WHERE book_id=:book_id ", { "book_id": book.id }).fetchall() print("***revs", revRow) for r in revRow: rev = Review(r[0], r[1], r[2], r[3], r[4], r[5]) reviews.append(rev) print("8888888", reviews) except Exception as e: flash('1 Error:{}'.format(e), category="error") flash('Review error ', category="error") return render_template("book.html", hasReview=userHasRev, reviews=reviews, book=vars(book), user=user, userReview=userReview) print("pooooost") # ============================================= POST METHOD =================== if request.method == 'POST': print("============here") if not userHasRev: starRating = request.form.get('rating') comment = request.form.get('comment') review_rating = int(starRating) usrName = "" userId = 0 try: userId = session["user_id"] usrName = session["usrname"] except Exception as e: print(e) usrName = "" try: db.execute( "INSERT INTO reviews (user_id, book_id, rating, review) VALUES (:user_id, :book_id, :rating, :review);", { "user_id": userId, "book_id": book.id, "rating": review_rating, "review": comment }) newCount = book.review_count + 1 newSum = book.ratings_sum + review_rating newAverage = newSum / newCount db.execute( "UPDATE books SET review_count=:count, ratings_sum=:sum, average_reviews=:average WHERE id=:isbn", { "count": newCount, "sum": newSum, "average": newAverage, "isbn": book.isbn }) db.commit() print("iiiiiiiiiiiiiiiiii") revew = Review(0, session["user_id"], book.id, review_rating, comment, usrName) reviews.insert(0, revew) book.review_count = newCount book.ratings_sum = newSum book.average_reviews = newAverage flash("review success", category="success") userHasRev = True newReview = True print("------------here2") except Exception as e: flash('Review not added , Error:{}, '.format(e), category="error") return render_template("book.html", user=user, book=vars(book), reviews=reviews, hasReview=userHasRev, isbn=book.isbn, userReview=userReview) if userHasRev and (not newReview): flash("review already exist", category="error") api_data = {} # api_data = getApiData(isbn) # if not api_data: # api_data = {'subjects': ['subjects cannot be found']} if api_data is not None: book = vars(book) book.update(api_data) return render_template("book.html", book=book, reviews=reviews, hasReview=userHasRev, isbn=book["isbn"], user=user, userReview=userReview)