This commit is contained in:
parent
0dbadefc8d
commit
f06cc9e3c7
91
stats.py
91
stats.py
|
|
@ -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 ('')
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue