From 83678373d6096c08de014a8fa6260277289da826 Mon Sep 17 00:00:00 2001 From: phowell Date: Mon, 26 Aug 2024 07:39:13 -0700 Subject: [PATCH] flex and semester start --- courses.py | 33 +++++++++++++++++++++++++++++++-- flexday.py | 1 + localcache2.py | 30 +++++++++++++++++++++++++++--- useful queries.sql | 23 +++++++++++++++++++++++ 4 files changed, 82 insertions(+), 5 deletions(-) diff --git a/courses.py b/courses.py index 9763679..3b7f3db 100644 --- a/courses.py +++ b/courses.py @@ -375,13 +375,42 @@ def course_term_summary_local(term="180",term_label="FA23"): #print(info) oo.write('\n\n') +from localcache2 import student_count, teacher_list, course_from_id, course_sched_entry_from_id + # Relevant stuff trying to see if its even being used or not -def course_term_summary(term="180",term_label="FA23"): +def course_term_summary(term="184",term_label="FA24"): print("Summary of %s" % term_label) - courses = getCoursesInTerm(term,0,0) + get_fresh = 0 + courses = getCoursesInTerm(term, get_fresh, 0) print("output to cache/term_summary.txt") outp = codecs.open('cache/term_summary.txt','w','utf-8') + outp.write('id,name,view,type,state,sched_start,ilearn_start,sched_students,ilearn_students,num_teachers,teacher1,teacher2,teacher2\n') + + for c in courses: + c_db = course_from_id(c['id']) + try: + ilearn_start = c_db['start_at'] + s_db = course_sched_entry_from_id(c['id']) + except: + print(f"problem with this course: {c_db}") + continue + sched_start = '' + sched_students = '' + type = '' + if (s_db): + sched_start = s_db['start'] + sched_students =s_db['act'] + type = s_db['type'] + #print(s_db) + num_students = student_count(c['id']) + tchr = teacher_list(c['id']) + tt = ','.join([x[1] for x in tchr]) + + line = f"{c['id']},{c['course_code']},{c['default_view']},{type},{c['workflow_state']},{sched_start},{ilearn_start},{sched_students},{num_students},{len(tchr)},{tt}" + print(line) + outp.write(line + "\n") + return tup = tuple("id course_code default_view workflow_state".split(" ")) smaller = [ funcy.project(x , tup) for x in courses ] diff --git a/flexday.py b/flexday.py index 0b6f8bc..ad8a762 100644 --- a/flexday.py +++ b/flexday.py @@ -203,6 +203,7 @@ def search_user(searchterm=''): def search_and_select_user(searchterm): candidates = search_user(searchterm) + if len(candidates) == 0: return 0 if len(candidates) == 1: return candidates[0] for i,c in enumerate(candidates): diff --git a/localcache2.py b/localcache2.py index b98e59b..008ea33 100644 --- a/localcache2.py +++ b/localcache2.py @@ -134,6 +134,14 @@ def user_from_goo(goo): # convert row to dict using column names as keys return dict(zip([desc[0] for desc in cursor.description], row)) +def course_sched_entry_from_id(id): + q = f"SELECT * FROM canvas.schedule s WHERE s.canvascourse={id}" + (connection,cursor) = db() + cursor.execute(q, None) # execute query with optional parameters + row = cursor.fetchone() # fetch a single row + if row: + # convert row to dict using column names as keys + return dict(zip([desc[0] for desc in cursor.description], row)) def course_from_id(id): q = f"SELECT * FROM canvas.courses c WHERE c.id={id}" @@ -277,7 +285,7 @@ ORDER BY num DESC, u.sortable_name""" % (where1,where2) -def all_sem_courses_teachers(SEM="202450"): +def all_sem_courses_teachers(SEM="202470"): q = f"""SELECT c.id, c.name, c.course_code, u.name, u.sortable_name, u.id AS user_cid, p.sis_user_id, s.type, s.crn FROM canvas.courses AS c JOIN canvas.enrollments AS e ON e.course_id=c.id JOIN canvas.users AS u ON u.id=e.user_id @@ -426,9 +434,25 @@ def courses_to_sched(): conn.close() +def student_count(courseid): + conn,cursor = db() + q = f"""SELECT COUNT(u.id) AS student_count FROM canvas.courses AS c +JOIN canvas.enrollments AS e ON e.course_id=c.id +JOIN canvas.users AS u ON u.id=e.user_id +WHERE c.id={courseid} +AND e.type='StudentEnrollment';""" + cursor.execute(q) + return cursor.fetchall()[0][0] - - +def teacher_list(courseid): + conn,cursor = db() + q = f"""SELECT u.id, u.name FROM canvas.courses AS c + JOIN canvas.enrollments AS e ON e.course_id=c.id + JOIN canvas.users AS u ON u.id=e.user_id + WHERE c.id={courseid} + AND e.type='TeacherEnrollment';""" + cursor.execute(q) + return cursor.fetchall() diff --git a/useful queries.sql b/useful queries.sql index e9682b6..e7efdf7 100644 --- a/useful queries.sql +++ b/useful queries.sql @@ -87,6 +87,29 @@ where (s.type='online' or s.type='hybrid' or s.type='online line') and not cc.path like '%noemail%' and not cc.path='sstaff@gavilan.edu'; + + + +-- +-- semester prep +-- +-- + +-- student count of course +SELECT COUNT(u.id) AS student_count FROM canvas.courses AS c +JOIN canvas.enrollments AS e ON e.course_id=c.id +JOIN canvas.users AS u ON u.id=e.user_id +WHERE c.id=19570 +AND e.type='StudentEnrollment'; + + +-- teacher names +SELECT u.id, u.name FROM canvas.courses AS c + JOIN canvas.enrollments AS e ON e.course_id=c.id + JOIN canvas.users AS u ON u.id=e.user_id + WHERE c.id=19570 + AND e.type='TeacherEnrollment'; + -- -- -- users in sp24 and number of each type of course taking