Download app/controllers/review_controller.py from atharvp/courseAid: direct link, hf CLI and curl.
- Browser
- Download file 8.31 kB
-
https://huggingface.co/spaces/atharvp/courseAid/resolve/main/app/controllers/review_controller.py
- Command line
-
hf download hf://spaces/atharvp/courseAid/app/controllers/review_controller.py
-
curl -L -o review_controller.py https://huggingface.co/spaces/atharvp/courseAid/resolve/main/app/controllers/review_controller.py
8.31 kB
| import psycopg2 | |
| from flask import request, jsonify, render_template, session, flash, redirect, url_for | |
| from ..models.intructors import Instructor | |
| from ..models import reviews as r | |
| from ..models.reviews import Reviews | |
| from ..utils.helper import validate_instructor, get_consensus_summary, update_summary_cache | |
| def get_user_reviews(conn): | |
| cursor = conn.cursor() | |
| message = "" | |
| username = session.get("user_id") | |
| try: | |
| result = [] | |
| rows = Reviews.get_user_past_reviews(cursor, username) | |
| for row in rows: | |
| result.append({ | |
| 'review_id': row[0], | |
| 'comment': row[1], | |
| 'rating': row[2], | |
| 'post_time': row[3], | |
| 'last_updated': row[4], | |
| 'course_number': row[5], | |
| 'instructor_first': row[6], | |
| 'instructor_last': row[7], | |
| }) | |
| except psycopg2.Error as e: | |
| message = f"Error getting reviews for {username}: {e}" | |
| finally: | |
| cursor.close() | |
| conn.close() | |
| return render_template("reviews/pastreviews.html", reviews=result, | |
| message = message, message_type="info") | |
| def get_reviews_for_instructor(conn, instructor_name): | |
| cursor = conn.cursor() | |
| message = "" | |
| validate_instructor_results = validate_instructor(cursor, instructor_name ) | |
| if (validate_instructor_results): | |
| instructor_first, instructor_last = validate_instructor_results | |
| else: | |
| message += "Instructor does not exist" | |
| cursor.close() | |
| return render_template("reviews/professor_reviews.html", reviews=[], message=message) | |
| try: | |
| print("getting summary...") | |
| consensus_summary = get_consensus_summary(instructor_first, instructor_last) | |
| print("got summary") | |
| print(consensus_summary) | |
| print("getting departments") | |
| departments = Instructor.get_departments_of_instructor(cursor, instructor_name) | |
| print("got departments") | |
| print("getting courses") | |
| courses = Instructor.get_courses_of_instructor(cursor, instructor_name) | |
| print("got courses") | |
| print("getting avg rating") | |
| avg_rating = Instructor.get_average_rating(cursor, instructor_name) | |
| print("got avg rating") | |
| if not departments: | |
| departments = [] | |
| if not courses: | |
| courses = [] | |
| if not avg_rating: | |
| avg_rating = 'NA' | |
| username = session.get("user_id") | |
| instructor_info = { | |
| 'first_name': instructor_first, | |
| 'last_name': instructor_last, | |
| 'courses': courses, | |
| 'departments': departments, | |
| 'avg_rating': avg_rating, | |
| 'consensus_summary': consensus_summary | |
| } | |
| print("getting reviews") | |
| result = Reviews.get_reviews_for_instructor(cursor, instructor_first, instructor_last, username) | |
| print("got reviews") | |
| if not result: | |
| message += "No reviews found for this instructor" | |
| except Exception as e: | |
| message = f"Error getting reviews for {instructor_name}: {e}" | |
| result = [] | |
| instructor_info = { | |
| 'first_name': instructor_first, | |
| 'last_name': instructor_last, | |
| 'courses': [], | |
| 'departments': [], | |
| 'avg_rating': 'N/A', | |
| 'consensus_summary': "N/A" | |
| } | |
| finally: | |
| cursor.close() | |
| conn.close() | |
| return render_template("reviews/professor_reviews.html", | |
| reviews=result, | |
| message=message, | |
| instructor_name=f"{instructor_first} {instructor_last}", | |
| instructor_info=instructor_info, ) | |
| def edit_review(review_id, conn): | |
| cursor = conn.cursor() | |
| message = "" | |
| try: | |
| if Reviews.check_review_exists(cursor, session.get("user_id"), review_id) is None: | |
| cursor.close() | |
| message += "No review found for this username" | |
| return jsonify({ | |
| 'success': False, | |
| 'message': message | |
| }) | |
| data = request.get_json() | |
| new_comment = data.get('comment') | |
| new_rating = data.get('rating') | |
| Reviews.edit_review(cursor,new_comment, new_rating, session.get("user_id"), review_id) | |
| conn.commit() | |
| cursor.close() | |
| message = f"Reviews {review_id} successfully updated" | |
| return jsonify({ | |
| 'success': True, | |
| 'message': message | |
| }) | |
| except psycopg2.Error as e: | |
| message += f"Error getting reviews for {review_id}: {e}" | |
| conn.rollback() | |
| cursor.close() | |
| return jsonify({ | |
| 'success': False, | |
| 'message': message | |
| }) | |
| except Exception as e: | |
| message = f"Error getting reviews for {review_id}: {e}" | |
| conn.rollback() | |
| cursor.close() | |
| return jsonify({ | |
| 'success':False, | |
| 'message': message | |
| }) | |
| finally: | |
| cursor.close() | |
| conn.close() | |
| def delete_review(review_id, conn): | |
| cursor = conn.cursor() | |
| message = "" | |
| try: | |
| if Reviews.check_review_exists(cursor, session.get("user_id"), review_id) is None: | |
| cursor.close() | |
| message += "No review found for this username" | |
| return jsonify({ | |
| 'success': False, | |
| 'message': message | |
| }) | |
| Reviews.delete_review(cursor, session.get("user_id"), review_id) | |
| conn.commit() | |
| cursor.close() | |
| message = f"Reviews {review_id} successfully deleted" | |
| return jsonify({ | |
| 'success': True, | |
| 'message': message | |
| }) | |
| except psycopg2.Error as e: | |
| message = f"Database error: {review_id}: {e}" | |
| conn.rollback() | |
| cursor.close() | |
| return jsonify({ | |
| 'success': False, | |
| 'message': message | |
| }), 500 | |
| except Exception as e: | |
| message = f"Error getting reviews for {review_id}: {e}" | |
| conn.rollback() | |
| cursor.close() | |
| return jsonify({ | |
| 'success': False, | |
| 'message': message | |
| }), 500 | |
| finally: | |
| cursor.close() | |
| conn.close() | |
| def review_form(instructor_first,instructor_last): | |
| """Display review form for a specific professor""" | |
| user_id = session.get("user_id") | |
| courses = r.get_course_sections(instructor_first, instructor_last) | |
| if not courses: | |
| return redirect(url_for('index')) | |
| if request.method == 'POST': | |
| json_data = request.get_json(silent=True) or {} | |
| course_number = request.form.get('course_number') or json_data.get('course_number') | |
| rating = request.form.get('rating') or json_data.get('rating') | |
| comment = request.form.get('comment') or json_data.get('comment') | |
| if not course_number or not rating or not comment: | |
| flash("Please add a comment before submitting your review.", "error") | |
| return redirect(url_for("review_form", instructor_first=instructor_first, instructor_last=instructor_last)) | |
| new_review = r.Reviews( | |
| comment=comment, | |
| instructor_first=instructor_first, | |
| instructor_last=instructor_last, | |
| course_num=course_number, | |
| rating = rating, | |
| username = user_id) | |
| review = r.save_review(new_review) | |
| update_summary_cache(instructor_first, instructor_last) | |
| r.save_review_embedding(review.id,review.embedding) | |
| print(review) | |
| if request.is_json: | |
| return jsonify(new_review.to_dict()), 201 | |
| flash(f'Reviews for {instructor_first} {instructor_last} submitted successfully!', 'success') | |
| return redirect(url_for('index')) | |
| return render_template('review_form.html', courses=courses, instructor_first=instructor_first, instructor_last=instructor_last) | |
| def view_reviews(): | |
| reviews = r.get_reviews() | |
| return render_template('reviews/reviews_list.html', reviews=reviews) | |