This commit is contained in:
phowell 2023-04-20 09:25:23 -07:00
parent 0dbadefc8d
commit f06cc9e3c7
1 changed files with 91 additions and 0 deletions

View File

@ -40,6 +40,7 @@ def num(s):
return float(s) return float(s)
import json, csv, requests, sys, re import json, csv, requests, sys, re
from multiprocessing import Semaphore
from statistics import mean, median, stdev from statistics import mean, median, stdev
from pipelines import fetch, url from pipelines import fetch, url
from courses import getCoursesInTerm from courses import getCoursesInTerm
@ -84,6 +85,95 @@ def grades(writer, sem, COURSE_ID, course_code):
print("Exception:", e) print("Exception:", e)
schedules = {}
import codecs, os
def load_schedules():
global schedules
if not schedules:
for f in os.listdir('cache/schedule'):
m = re.search(r'(\w\w\d\d)_sched_expanded\.json', f)
if m:
sem = m.group(1)
schedules[sem] = json.loads( codecs.open('cache/schedule/' + f, 'r', 'utf-8').read() )
def to_crn_fallback(name):
#print(name)
name = name.lower()
try:
m1 = re.search(r'(\d\d\d\d\d)',name)
if m1:
crn = m1.group(1)
else:
return None,None
m2 = re.search(r'([wispufa][wispufa]\d\d)',name.lower())
if m2:
sem = m2.group(1)
else:
return None, None
#print(name, crn, sem)
return crn, sem
except Exception as e:
#print("Exception: ", e, name)
return None, None
def short_name_to_crn(name):
#print(name)
try:
parts = name.split(' ')
code = parts[0]
sem = parts[1]
crn = parts[2]
m_sem = re.search(r'^(\w\w\d\d)$',sem)
if not m_sem:
return to_crn_fallback(name)
m = re.search(r'^(\d\d\d\d\d)$',crn)
if m:
return crn,sem
else:
crn_parts = crn.split('/')
m = re.search(r'^(\d\d\d\d\d)$',crn_parts[0])
if m:
return crn_parts[0],sem
#print("non standard course short name: ", code, sem, crn)
return to_crn_fallback(name)
except Exception as e:
#print("Exception: ", e, name)
return to_crn_fallback(name)
def short_name_to_teacher(name):
load_schedules()
crn, sem = short_name_to_crn(name)
try:
if sem:
sem = sem.lower()
if sem[0:2]=='wi':
sem = 'sp' + sem[2:]
for course in schedules[sem]:
if course['crn'] == crn:
return course['teacher'], course['type']
except Exception as e:
return None
return None
def nametest():
with open(all_courses_file) as csvfile:
csvreader = csv.reader(csvfile)
next(csvreader)
for row in csvreader:
print(row[0], "-", short_name_to_teacher(row[0]))
next(csvreader)
def count_above_70(li): def count_above_70(li):
pass pass
@ -360,6 +450,7 @@ def externaltool(): # a list
if __name__ == "__main__": if __name__ == "__main__":
options = { 1: ['get all historical grades from ilearn',get_all] , options = { 1: ['get all historical grades from ilearn',get_all] ,
2: ['process grades csv file',process_grades] , 2: ['process grades csv file',process_grades] ,
3: ['test shortname parse',nametest] ,
} }
print ('') print ('')