work to build a much better manual version of the script
one thing that is clear to me is that the preferred name logic should really be removed entirely from the coldcall.py program and moved into the coldcall.py file. I'm currently ignoring that functionality in the coldcallbot-manual.py but I haven't yet fully removed it from the other.
This commit is contained in:
parent
92e65de771
commit
89c5369ad9
20
coldcall.py
20
coldcall.py
@ -10,7 +10,7 @@ import os.path
|
||||
import re
|
||||
|
||||
class ColdCall():
|
||||
def __init__ (self, record_attendance=True):
|
||||
def __init__ (self, record_attendance=True, preferred_name_field=None):
|
||||
self.today = str(datetime.date(datetime.now()))
|
||||
# how much less likely should it be that a student is called upon?
|
||||
self.weight = 2
|
||||
@ -20,8 +20,12 @@ class ColdCall():
|
||||
self.__fn_studentinfo = "data/student_information.tsv"
|
||||
self.__fn_daily_calllist = f"data/call_list-{self.today}.tsv"
|
||||
self.__fn_daily_attendance = f"data/attendance-{self.today}.tsv"
|
||||
self.__preferred_name_field = preferred_name_field
|
||||
|
||||
if preferred_name_field != None:
|
||||
self.preferred_names = self.__get_preferred_names()
|
||||
else:
|
||||
self.preferred_names = None
|
||||
|
||||
def __load_prev_questions(self):
|
||||
previous_questions = defaultdict(int)
|
||||
@ -42,7 +46,7 @@ class ColdCall():
|
||||
preferred_names = {}
|
||||
with open(self.__fn_studentinfo, 'r') as f:
|
||||
for row in DictReader(f, delimiter="\t"):
|
||||
preferred_names[row["Your username on the class Teams server"]] = row["Name you'd like to go by in class"]
|
||||
row["Your UW student number"] = row[self.__preferred_name_field]
|
||||
|
||||
return(preferred_names)
|
||||
|
||||
@ -52,7 +56,7 @@ class ColdCall():
|
||||
else:
|
||||
return None
|
||||
|
||||
def __select_student_from_list (self, students_present):
|
||||
def select_student_from_list(self, students_present):
|
||||
prev_questions = self.__load_prev_questions()
|
||||
|
||||
# created a weighted list by starting out with everybody 1
|
||||
@ -67,7 +71,7 @@ class ColdCall():
|
||||
# print(weights) # DEBUG LINE
|
||||
return choices(list(weights.keys()), weights=list(weights.values()), k=1)[0]
|
||||
|
||||
def __record_attendance(self, students_present):
|
||||
def record_attendance(self, students_present):
|
||||
# if it's the first one of the day, write it out
|
||||
if not os.path.exists(self.__fn_daily_attendance):
|
||||
with open(self.__fn_daily_attendance, "w") as f:
|
||||
@ -79,7 +83,7 @@ class ColdCall():
|
||||
",".join(students_present)]),
|
||||
file=f)
|
||||
|
||||
def __record_coldcall(self, selected_student):
|
||||
def record_coldcall(self, selected_student):
|
||||
# if it's the first one of the day, write it out
|
||||
if not os.path.exists(self.__fn_daily_calllist):
|
||||
with open(self.__fn_daily_calllist, "w") as f:
|
||||
@ -91,12 +95,12 @@ class ColdCall():
|
||||
"MISSING", "MISSING"]), file=f)
|
||||
|
||||
def coldcall(self, students_present):
|
||||
selected_student = self.__select_student_from_list(students_present)
|
||||
selected_student = self.select_student_from_list(students_present)
|
||||
|
||||
# record the called-upon student in the right place
|
||||
if self.record_attendance:
|
||||
self.__record_attendance(students_present)
|
||||
self.__record_coldcall(selected_student)
|
||||
self.record_attendance(students_present)
|
||||
self.record_coldcall(selected_student)
|
||||
|
||||
preferred_name = self.__get_preferred_name(selected_student)
|
||||
if preferred_name:
|
||||
|
||||
@ -1,15 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from coldcall import ColdCall
|
||||
import re
|
||||
from datetime import datetime
|
||||
from csv import DictReader
|
||||
|
||||
current_time = datetime.today()
|
||||
|
||||
## create the coldcall object
|
||||
cc = ColdCall(record_attendance=False)
|
||||
cc = ColdCall(record_attendance=False, preferred_name_field="Name you'd like to go by in class")
|
||||
|
||||
student_list = cc.preferred_names
|
||||
def get_missing(d=current_time):
|
||||
date_string = f'{d.month}/{d.day}/{d.year}'
|
||||
with open("data/absence_poll_data.tsv", 'r') as f:
|
||||
for row in DictReader(f, delimiter="\t"):
|
||||
if row["Date of class session you will be absent"] == date_string:
|
||||
yield(row["Your UW student number"])
|
||||
|
||||
# print out 100 students
|
||||
full_names = {}
|
||||
registered_students = []
|
||||
with open("data/2022_winter_COM_481_A_students.csv", 'r') as f:
|
||||
for row in DictReader(f, delimiter=","):
|
||||
student_no = row["StudentNo"].strip()
|
||||
registered_students.append(student_no)
|
||||
full_names[student_no] = f"{row['FirstName']} {row['LastName']}"
|
||||
## print("Registered:", registered_students)
|
||||
|
||||
missing_today = [x for x in get_missing(current_time)]
|
||||
## print("Missing Today: ", missing_today)
|
||||
|
||||
preferred_names = {}
|
||||
with open("data/student_information.tsv", 'r') as f:
|
||||
for row in DictReader(f, delimiter="\t"):
|
||||
preferred_names[row["Your UW student number"]] = row["Name you'd like to go by in class"]
|
||||
## print("Preferred names:", preferred_names)
|
||||
|
||||
students_present = [s for s in registered_students if s not in missing_today]
|
||||
## print("Students present:", students_present)
|
||||
|
||||
for i in range(100):
|
||||
print(f"{i + 1}. {cc.coldcall(student_list)} [ ] [ ]\n")
|
||||
selected_student = cc.select_student_from_list(students_present)
|
||||
|
||||
try:
|
||||
preferred_name = preferred_names[selected_student]
|
||||
except KeyError:
|
||||
preferred_name = "MISSING PREFERRED NAME"
|
||||
|
||||
print(f"{i + 1}.",
|
||||
preferred_name, "::",
|
||||
selected_student, "::",
|
||||
full_names[selected_student])
|
||||
cc.record_coldcall(selected_student)
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user