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)
import json, csv, requests, sys, re
from multiprocessing import Semaphore
from statistics import mean, median, stdev
from pipelines import fetch, url
from courses import getCoursesInTerm
@ -84,6 +85,95 @@ def grades(writer, sem, COURSE_ID, course_code):
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):
pass
@ -360,6 +450,7 @@ def externaltool(): # a list
if __name__ == "__main__":
options = { 1: ['get all historical grades from ilearn',get_all] ,
2: ['process grades csv file',process_grades] ,
3: ['test shortname parse',nametest] ,
}
print ('')