Skip to content

Commit

Permalink
Function Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
shiva-menta committed Sep 20, 2024
1 parent 5db757b commit 4ec46b8
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 32 deletions.
34 changes: 21 additions & 13 deletions backend/courses/management/commands/precompute_pcr_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,21 @@

from django.core.management.base import BaseCommand
from tqdm import tqdm
import json
import os

from courses.util import get_current_semester
from review.views import manual_department_reviews, manual_instructor_reviews, manual_instructor_for_course_reviews, manual_course_reviews, manual_course_plots
from courses import registrar
from courses.models import Course, Section, Department, Instructor
from courses.util import get_course_and_section, get_current_semester
from courses.models import Course, Department, Instructor

def save_object(id, data):
pass
"""
Common save object method to act as interface for any precomputation – either as S3 objects or storing directly in PostgreSQL.
"""
with open(os.path.expanduser(f"~/Desktop/test_data/{id}.json"), "w") as f:
json.dump(data, f, indent=4)

def precompute_instructors(verbose=False, semester=None):
def precompute_instructors(verbose=False):
if verbose:
print("Precomputing instructor view data.")

Expand All @@ -24,7 +29,7 @@ def precompute_instructors(verbose=False, semester=None):

review_json = {"summary": reviews, "sections": {}}
for course_code in reviews["courses"]:
section_reviews = manual_instructor_for_course_reviews(semester, course_code, instructor_id)
section_reviews = manual_instructor_for_course_reviews(semester=None, course_code=course_code, instructor_id=instructor_id)
if section_reviews:
review_json["sections"][course_code] = section_reviews

Expand All @@ -33,7 +38,7 @@ def precompute_instructors(verbose=False, semester=None):
def precompute_departments(verbose=False):
if verbose:
print("Precomputing department view data.")

for department in tqdm(Department.objects.all()):
department_code = department.code
reviews = manual_department_reviews(department_code)
Expand All @@ -45,23 +50,26 @@ def precompute_courses(verbose=False, semester=None):
print("Precomputing course view data.")

for course in tqdm(Course.objects.all()):
course_code = course.code
course_code = course.full_code

# Fetch Course Summary
reviews = manual_course_reviews(course_code, semester)
reviews = manual_course_reviews(course_code, None)
if not reviews:
continue
review_json = {"summary": reviews, "sections": {}}

# Fetch Section Data
for instructor_id in reviews["instructors"]:
instructor_reviews = manual_instructor_for_course_reviews(semester, course_code, instructor_id)
instructor_reviews = manual_instructor_for_course_reviews(semester=None, course_code=course_code, instructor_id=instructor_id)
if instructor_reviews:
review_json["instructors"][instructor_id] = instructor_reviews
review_json["sections"][instructor_id] = instructor_reviews

# Fetch Course Plots
plots = manual_course_plots(semester, None, course_code)
review_json["plots"] = plots
if "current_add_drop_period" in review_json["plots"]:
review_json["plots"]["current_add_drop_period"]["start"] = str(review_json["plots"]["current_add_drop_period"]["start"])
review_json["plots"]["current_add_drop_period"]["end"] = str(review_json["plots"]["current_add_drop_period"]["end"])

save_object(course_code, review_json)

Expand All @@ -75,6 +83,6 @@ def handle(self, *args, **kwargs):
root_logger = logging.getLogger("")
root_logger.setLevel(logging.DEBUG)

precompute_instructors(verbose=True, semester=kwargs["semester"])
precompute_departments(verbose=True, semester=kwargs["semester"])
# precompute_instructors(verbose=True)
# precompute_departments(verbose=True)
precompute_courses(verbose=True, semester=kwargs["semester"])
24 changes: 5 additions & 19 deletions backend/review/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ def extra_metrics_section_filters_pcr(current_semester=None):
@permission_classes([IsAuthenticated])
def course_reviews(request, course_code, semester=None):
request_semester = request.GET.get("semester")
reviews = manual_course_reviews(course_code, request_semester, semester)
reviews = manual_course_reviews(course_code, request_semester)
if not reviews:
raise Http404()

Expand All @@ -156,7 +156,7 @@ def most_recent_course_from_code(course_code, semester):
)


def manual_course_reviews(course_code, request_semester, semester=None):
def manual_course_reviews(course_code, request_semester):
"""
Get all reviews for the topic of a given course and other relevant information.
Different aggregation views are provided, such as reviews spanning all semesters,
Expand Down Expand Up @@ -431,7 +431,7 @@ def check_instructor_id(instructor_id):
]

def manual_instructor_reviews(instructor_id):
instructor = Instructor.objects.get(id=instructor_id).first()
instructor = Instructor.objects.get(id=instructor_id)
if not instructor:
return None

Expand Down Expand Up @@ -530,7 +530,7 @@ def instructor_reviews(request, instructor_id):


def manual_department_reviews(department_code):
department = Department.objects.get(code=department_code).first()
department = Department.objects.get(code=department_code)
if department is None:
return department

Expand Down Expand Up @@ -616,22 +616,8 @@ def department_reviews(request, department_code):
return Response(results)

def manual_instructor_for_course_reviews(semester, course_code, instructor_id):
if not semester:
return None
try:
course = (
Course.objects.filter(
course_filters_pcr,
**(
{"topic__courses__full_code": course_code, "topic__courses__semester": semester}
if semester
else {"full_code": course_code}
),
)
.order_by("-semester")[:1]
.select_related("topic__most_recent")
.get()
)
course = most_recent_course_from_code(course_code, semester)
course = course.topic.most_recent
except Course.DoesNotExist:
return None
Expand Down

0 comments on commit 4ec46b8

Please sign in to comment.