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)
|
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 ('')
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue