Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add script to fetch new professors/courses #38

Merged
merged 55 commits into from
Jan 30, 2023
Merged
Changes from 5 commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
724f641
add script to fetch new professors/courses
nsandler1 Nov 3, 2022
d181c58
convert string to semester once
nsandler1 Nov 3, 2022
67a614b
don't rely on api response ordering
nsandler1 Nov 3, 2022
f99cdaf
syntax
nsandler1 Nov 4, 2022
73be408
don't auto capitalize professor names
nsandler1 Nov 7, 2022
8bc72b8
remove unnecessary variable
nsandler1 Nov 9, 2022
2db329b
removed try/catch
nsandler1 Nov 10, 2022
6483460
replace print with comment
nsandler1 Nov 10, 2022
76b27b1
Merge branch 'fuzzy-professors' into update-courses-no-descriptions
nsandler1 Nov 10, 2022
1253635
Merge branch 'professor-alias' into update-courses-no-descriptions
nsandler1 Nov 10, 2022
0f607d0
Revert "Merge branch 'professor-alias' into update-courses-no-descrip…
nsandler1 Nov 11, 2022
8a216f8
Revert "Merge branch 'fuzzy-professors' into update-courses-no-descri…
nsandler1 Nov 11, 2022
e4b4d6b
reorder statements
nsandler1 Nov 10, 2022
d3a40bb
This reverts commit 0f607d0f2eb9574bdfb0a303936bd982472a674d.
nsandler1 Nov 11, 2022
c909d54
Merge branch 'fuzzy-professors' into update-courses-no-descriptions
nsandler1 Nov 11, 2022
23021f0
Merge branch 'professor-alias' into update-courses-no-descriptions
nsandler1 Nov 11, 2022
cfcee1c
make migrations
nsandler1 Nov 11, 2022
b7658c3
Merge branch 'professor-alias' into update-courses-no-descriptions
nsandler1 Nov 11, 2022
a88ddf5
update Professor.find_similar() to match `fuzzy-professors`
nsandler1 Nov 11, 2022
cc1a118
use new method to find similar professors
nsandler1 Nov 11, 2022
b8520b3
Merge branch 'master' into update-courses-no-descriptions
nsandler1 Nov 13, 2022
0ff4bb7
Merge branch 'fuzzy-professors' into update-courses-no-descriptions
nsandler1 Nov 13, 2022
31ccacc
fix api/serializers
nsandler1 Nov 13, 2022
33743d2
fix home/utils
nsandler1 Nov 14, 2022
4284f65
fix home/views/professor
nsandler1 Nov 14, 2022
852b3c1
Merge branch 'master' into update-courses-no-descriptions
tybug Nov 15, 2022
66dc6af
fix rejected professors being associated with recent recent semester
nsandler1 Nov 23, 2022
0c0bb95
Merge branch 'update-courses-no-descriptions' of https://github.com/p…
nsandler1 Nov 23, 2022
ea6f56a
Merge branch 'master' into update-courses-no-descriptions
nsandler1 Dec 11, 2022
0315abb
Merge branch 'master' into update-courses-no-descriptions
nsandler1 Dec 11, 2022
0744016
update slugging process
nsandler1 Dec 11, 2022
708a0ad
simplify Instructor: TBA case
nsandler1 Dec 11, 2022
f128b36
Merge branch 'master' into update-courses-no-descriptions
nsandler1 Dec 19, 2022
b7cfb4e
fix reverted changes
nsandler1 Dec 25, 2022
850f0f0
swap imports
nsandler1 Dec 25, 2022
2524dcb
remove duplicate function
nsandler1 Dec 25, 2022
24cc464
add back newline
tybug Dec 27, 2022
5767e0c
Merge branch 'master' into update-courses-no-descriptions
nsandler1 Jan 6, 2023
862d6a3
delcare professor variable in all cases
nsandler1 Jan 8, 2023
b53edff
use regex to catch cases
nsandler1 Jan 9, 2023
b654c35
customise help text
nsandler1 Jan 9, 2023
0f0e029
check professorAlias
nsandler1 Jan 10, 2023
cb47dda
fix creating duplicate professors
nsandler1 Jan 10, 2023
2366b02
move print statement
nsandler1 Jan 10, 2023
ac1f79d
avoid duplicate entries per semester
nsandler1 Jan 10, 2023
c870b60
Merge branch 'professor-course-dups' into update-courses-no-descriptions
nsandler1 Jan 10, 2023
89a1add
require migration checks
nsandler1 Jan 10, 2023
762c516
update help message
nsandler1 Jan 10, 2023
d22c117
Merge branch 'professor-course-dups' into update-courses-no-descriptions
nsandler1 Jan 11, 2023
6d1d8ba
check for null rows before creating new row
nsandler1 Jan 11, 2023
f53dbb5
reduce number of database hits
nsandler1 Jan 11, 2023
7e8c940
strip professor and course names
nsandler1 Jan 11, 2023
f27a34e
Merge branch 'master' into update-courses-no-descriptions
nsandler1 Jan 14, 2023
e179972
don't require migrations check
nsandler1 Jan 14, 2023
5b68090
add comments
nsandler1 Jan 14, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions home/management/commands/updatecourses.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import requests
from datetime import datetime

from django.core.management import BaseCommand
from django.db.models import Q

from home.models import Course, Professor, ProfessorCourse
from home.utils import Semester

class Command(BaseCommand):
def __init__(self):
super().__init__()
self.total_num_new_courses = 0
self.total_num_new_professors = 0

def add_arguments(self, parser):
parser.add_argument("semesters", nargs='+')
tybug marked this conversation as resolved.
Show resolved Hide resolved

def handle(self, *args, **options):
t_start = datetime.now()
semesters = [Semester(s) for s in options['semesters']]
print(f"Inputted Semesters: {', '.join(s.name() for s in semesters)}")

for semester in semesters:
kwargs = {"semester": semester, "per_page": 100, "page": 1}
course_data = requests.get("https://api.umd.io/v1/courses", params=kwargs).json()

if "error_code" in course_data[0].keys():
print(f"umd.io doesn't have data for {semester.name()}!")
continue

print(f"Working on courses for {semester.name()}...")

while course_data:
for umdio_course in course_data:
course = Course.unfiltered.filter(name=umdio_course['course_id']).first()
if not course:
course = Course(
name=umdio_course['course_id'],
department=umdio_course['dept_id'],
course_number=umdio_course['course_id'][4:],
tybug marked this conversation as resolved.
Show resolved Hide resolved
title=umdio_course['name'],
credits=umdio_course['credits'],
description=umdio_course["description"]
)

course.save()
self.total_num_new_courses += 1

self._professors(course, semester)
print(course)

kwargs["page"] += 1
course_data = requests.get("https://api.umd.io/v1/courses", params=kwargs).json()

print(f"\n** New Courses Created: {self.total_num_new_courses} **")
print(f"** New Professors Created: {self.total_num_new_professors} **")

runtime = datetime.now() - t_start
print(f"Runtime: {round(runtime.seconds / 60, 2)} minutes")

def _professors(self, course: Course, semester: Semester):
kwargs = {"course_id": course.name}
umdio_professors = requests.get("https://api.umd.io/v1/professors", params=kwargs).json()

for umdio_professor in umdio_professors:
try:
professor = Professor.unfiltered.filter(name=umdio_professor['name']).first()
except TypeError:
continue
tybug marked this conversation as resolved.
Show resolved Hide resolved

if umdio_professor['name'] == "Instructor: TBA":
continue

if not professor:
# To make our lives easier, attempt to automatically verify the professor
# following the same criteria in admin.py
split_name = umdio_professor['name'].strip().split()
first_name = split_name[0].lower().strip()
last_name = split_name[-1].lower().strip()
query = Professor.verified.filter(
(
Q(name__istartswith=first_name) &
Q(name__iendswith=last_name)
) |
Q(slug="_".join(reversed(split_name)).lower())
)

prof_name = " ".join(umdio_professor['name'].split())
tybug marked this conversation as resolved.
Show resolved Hide resolved
professor = Professor(name=prof_name, type=Professor.Type.PROFESSOR)

if not query.exists():
professor.slug = "_".join(reversed(split_name)).lower()
professor.status = Professor.Status.VERIFIED

professor.save()
self.total_num_new_professors += 1

for entry in umdio_professor['taught']:
if entry['course_id'] == course.name and Semester(entry['semester']) == semester:
ProfessorCourse.objects.create(course=course, professor=professor, recent_semester=semester)
tybug marked this conversation as resolved.
Show resolved Hide resolved
break
tybug marked this conversation as resolved.
Show resolved Hide resolved