]> code.communitydata.science - coldcallbot-discord.git/commitdiff
work to build a much better manual version of the script
authorBenjamin Mako Hill <mako@atdot.cc>
Wed, 5 Jan 2022 08:52:29 +0000 (17:52 +0900)
committerBenjamin Mako Hill <mako@atdot.cc>
Sat, 28 Sep 2024 23:11:00 +0000 (16:11 -0700)
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.

coldcall.py
coldcallbot-manual.py

index 1ba96a582b24104b2c35b4a225eab89c553a8fef..cc5504b529203e36bbb1ba970a98fa9f446516f0 100644 (file)
@@ -10,7 +10,7 @@ import os.path
 import re
 
 class ColdCall():
 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
         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.__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
 
 
-        self.preferred_names = self.__get_preferred_names()
+        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)
         
     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 = {}
         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)
         
 
         return(preferred_names)
         
@@ -52,7 +56,7 @@ class ColdCall():
         else:
             return None
 
         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
         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]
 
         # 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:
         # 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)
 
                              ",".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:
         # 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):
                              "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:
 
         # 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:
 
         preferred_name = self.__get_preferred_name(selected_student)
         if preferred_name:
index a4268eadeebefde7128dc9945e1f50ab0d98645b..6c128bac844e7cf7bd99e8006105543c62535783 100755 (executable)
@@ -1,15 +1,53 @@
 #!/usr/bin/env python3
 
 from coldcall import ColdCall
 #!/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
 
 ## 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")
+
+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"])
+
+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)
 
 
-student_list = cc.preferred_names
+missing_today = [x for x in get_missing(current_time)]
+## print("Missing Today: ", missing_today)
 
 
-# print out 100 students
+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):
 
 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)
 
 

Community Data Science Collective || Want to submit a patch?