]> code.communitydata.science - coldcallbot-discord.git/commitdiff
Merge branch 'COM481-2024Q4'
authorBenjamin Mako Hill <mako@atdot.cc>
Sat, 28 Sep 2024 23:27:12 +0000 (16:27 -0700)
committerBenjamin Mako Hill <mako@atdot.cc>
Sat, 28 Sep 2024 23:27:12 +0000 (16:27 -0700)
1  2 
coldcall.py

diff --combined coldcall.py
index cc5504b529203e36bbb1ba970a98fa9f446516f0,2250fac379fc98b0bfc06a0bb3695e711b3ad837..37b4eb520eec0f3b17a0f3fb54290a2de907eb2c
@@@ -8,24 -8,27 +8,28 @@@ from csv import DictReade
  
  import os.path
  import re
+ import json
  
  class ColdCall():
-     def __init__ (self, record_attendance=True, preferred_name_field=None):
+     def __init__ (self, record_attendance=True):
+         with open("configuration.json") as config_file:
+             config = json.loads(config_file.read())
          self.today = str(datetime.date(datetime.now()))
          # how much less likely should it be that a student is called upon?
          self.weight = 2
          self.record_attendance = record_attendance
  
          # filenames
-         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.__fn_studentinfo = config["student_info_file"]
+         self.__fn_daily_calllist = config["daily_calllist_file"].format(date=self.today)
+         self.__fn_daily_attendance = config["daily_attendance"].format(date=self.today)
  
-         if preferred_name_field != None:
-             self.preferred_names = self.__get_preferred_names()
+         self.unique_row = config["unique_name_rowname"]
 -        self.preferred_row = config["preferred_name_rowname"]
 -
 -        self.preferred_names = self.__get_preferred_names()
++        if "preferred_name_rowname" in config:
++            self.preferred_row = config["preferred_name_rowname"]
 +        else:
-             self.preferred_names = None
++            self.preferred_row = None
          
      def __load_prev_questions(self):
          previous_questions = defaultdict(int)
@@@ -35,7 -38,7 +39,7 @@@
                  with open(f"./data/{fn}", 'r') as f:
                      for row in DictReader(f, delimiter="\t"):
                          if not row["answered"] == "FALSE":
-                             previous_questions[row["unique_name"]] += 1
+                             previous_questions[row[self.unique_row]] += 1
  
          return previous_questions
  
@@@ -46,7 -49,7 +50,7 @@@
          preferred_names = {}
          with open(self.__fn_studentinfo, 'r') as f:
              for row in DictReader(f, delimiter="\t"):
-                 row["Your UW student number"] = row[self.__preferred_name_field]
+                 preferred_names[row[self.unique_row]] = row[self.preferred_row]
  
          return(preferred_names)
          
@@@ -56,7 -59,7 +60,7 @@@
          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
@@@ -71,7 -74,7 +75,7 @@@
          # 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:
                               ",".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:
-                 print("\t".join(["unique_name", "timestamp", "answered", "assessment"]), file=f)
+                 print("\t".join([self.unique_row, self.preferred_row, "answered", "assessment", "timestamp"]), file=f)
+         preferred_name = self.__get_preferred_name(selected_student)
  
          # open for appending the student
          with open(self.__fn_daily_calllist, "a") as f:
-             print("\t".join([selected_student, str(datetime.now()),
-                              "MISSING", "MISSING"]), file=f)
+             print("\t".join([selected_student, preferred_name,
+                              "MISSING", "MISSING", str(datetime.now())]), 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:
              coldcall_message = f"@{selected_student}, you're up!"
          return coldcall_message
  
- # cc = ColdCall()
- # test_student_list = ["jordan", "Kristen Larrick", "Madison Heisterman", "Maria.Au20", "Laura (Alia) Levi", "Leona Aklipi", "anne", "emmaaitelli", "ashleylee", "allie_partridge", "Tiana_Cole", "Hamin", "Ella Qu", "Shizuka", "Ben Baird", "Kim Do", "Isaacm24", "Sam Bell", "Courtneylg"]
- # print(cc.coldcall(test_student_list))
- # test_student_list = ["jordan", "Kristen Larrick", "Mako"]
- # print(cc.coldcall(test_student_list))
- # test_student_list = ["jordan", "Kristen Larrick"]
- # print(cc.coldcall(test_student_list))

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